diff --git a/common-files/apply-chromium-patches.py b/common-files/apply-chromium-patches.py index 2cb10f3fbd..f2380022df 100644 --- a/common-files/apply-chromium-patches.py +++ b/common-files/apply-chromium-patches.py @@ -158,7 +158,7 @@ def execute(args, p): break else: applied_patches.append(patch_path) - if need_revert: + if need_revert and not is_dry_run_mode: ope_str = "re-apply" if is_revert_mode else "revert" logger.info("%sing patches due to previous error...", ope_str.capitalize()) for patch_path in applied_patches[::-1]: diff --git a/common-files/chromium-patches/chromium-numerics-byte_conversions-no-std-bit_cast/6312.patch b/common-files/chromium-patches/chromium-numerics-byte_conversions-no-std-bit_cast/6312.patch new file mode 100644 index 0000000000..ea49caf75a --- /dev/null +++ b/common-files/chromium-patches/chromium-numerics-byte_conversions-no-std-bit_cast/6312.patch @@ -0,0 +1,120 @@ +std::bit_cast doesn't exist in libstdcxx 10 + +--- a/base/numerics/byte_conversions.h ++++ b/base/numerics/byte_conversions.h +@@ -11,6 +11,7 @@ + #include + #include + ++#include "absl/base/casts.h" + #include "base/numerics/basic_ops_impl.h" + + namespace base::numerics { +@@ -80,7 +81,7 @@ + // storage, and explicit big endian for network order. + inline constexpr float FloatFromNativeEndian( + std::span bytes) { +- return std::bit_cast(U32FromNativeEndian(bytes)); ++ return absl::bit_cast(U32FromNativeEndian(bytes)); + } + // Returns a double with the value in `bytes` interpreted as the native endian + // encoding of the number for the machine. +@@ -91,7 +92,7 @@ + // storage, and explicit big endian for network order. + inline constexpr double DoubleFromNativeEndian( + std::span bytes) { +- return std::bit_cast(U64FromNativeEndian(bytes)); ++ return absl::bit_cast(U64FromNativeEndian(bytes)); + } + + // Returns a uint8_t with the value in `bytes` interpreted as a little-endian +@@ -156,7 +157,7 @@ + // buffer. + inline constexpr float FloatFromLittleEndian( + std::span bytes) { +- return std::bit_cast(U32FromLittleEndian(bytes)); ++ return absl::bit_cast(U32FromLittleEndian(bytes)); + } + // Returns a double with the value in `bytes` interpreted as a little-endian + // encoding of the integer. +@@ -168,7 +169,7 @@ + // buffer. + inline constexpr double DoubleFromLittleEndian( + std::span bytes) { +- return std::bit_cast(U64FromLittleEndian(bytes)); ++ return absl::bit_cast(U64FromLittleEndian(bytes)); + } + + // Returns a uint8_t with the value in `bytes` interpreted as a big-endian +@@ -223,7 +224,7 @@ + // that were always in memory, such as when stored in shared-memory (or through + // IPC) as a byte buffer. + inline constexpr float FloatFromBigEndian(std::span bytes) { +- return std::bit_cast(U32FromBigEndian(bytes)); ++ return absl::bit_cast(U32FromBigEndian(bytes)); + } + // Returns a double with the value in `bytes` interpreted as a big-endian + // encoding of the integer. +@@ -234,7 +235,7 @@ + // IPC) as a byte buffer. + inline constexpr double DoubleFromBigEndian( + std::span bytes) { +- return std::bit_cast(U64FromBigEndian(bytes)); ++ return absl::bit_cast(U64FromBigEndian(bytes)); + } + + // Returns a byte array holding the value of a uint8_t encoded as the native +@@ -285,7 +286,7 @@ + // byte buffer. Prefer an explicit little endian when storing data into external + // storage, and explicit big endian for network order. + inline constexpr std::array FloatToNativeEndian(float val) { +- return U32ToNativeEndian(std::bit_cast(val)); ++ return U32ToNativeEndian(absl::bit_cast(val)); + } + // Returns a byte array holding the value of a double encoded as the native + // endian encoding of the number for the machine. +@@ -295,7 +296,7 @@ + // byte buffer. Prefer an explicit little endian when storing data into external + // storage, and explicit big endian for network order. + inline constexpr std::array DoubleToNativeEndian(double val) { +- return U64ToNativeEndian(std::bit_cast(val)); ++ return U64ToNativeEndian(absl::bit_cast(val)); + } + + // Returns a byte array holding the value of a uint8_t encoded as the +@@ -351,7 +352,7 @@ + // memory, such as when stored in shared-memory (or passed through IPC) as a + // byte buffer. + inline constexpr std::array FloatToLittleEndian(float val) { +- return internal::ToLittleEndian(std::bit_cast(val)); ++ return internal::ToLittleEndian(absl::bit_cast(val)); + } + // Returns a byte array holding the value of a double encoded as the + // little-endian encoding of the number. +@@ -362,7 +363,7 @@ + // memory, such as when stored in shared-memory (or passed through IPC) as a + // byte buffer. + inline constexpr std::array DoubleToLittleEndian(double val) { +- return internal::ToLittleEndian(std::bit_cast(val)); ++ return internal::ToLittleEndian(absl::bit_cast(val)); + } + + // Returns a byte array holding the value of a uint8_t encoded as the big-endian +@@ -418,7 +419,7 @@ + // IPC) as a byte buffer. Use the little-endian encoding for storing and reading + // from storage. + inline constexpr std::array FloatToBigEndian(float val) { +- return internal::ToLittleEndian(ByteSwap(std::bit_cast(val))); ++ return internal::ToLittleEndian(ByteSwap(absl::bit_cast(val))); + } + // Returns a byte array holding the value of a double encoded as the big-endian + // encoding of the number. +@@ -429,7 +430,7 @@ + // IPC) as a byte buffer. Use the little-endian encoding for storing and reading + // from storage. + inline constexpr std::array DoubleToBigEndian(double val) { +- return internal::ToLittleEndian(ByteSwap(std::bit_cast(val))); ++ return internal::ToLittleEndian(ByteSwap(absl::bit_cast(val))); + } + + } // namespace base::numerics diff --git a/common-files/chromium-patches/compiler-clang-lib-dir/6312.patch b/common-files/chromium-patches/compiler-clang-lib-dir/6312.patch new file mode 100644 index 0000000000..e4ef8c3c74 --- /dev/null +++ b/common-files/chromium-patches/compiler-clang-lib-dir/6312.patch @@ -0,0 +1,45 @@ +--- a/build/config/clang/clang.gni ++++ b/build/config/clang/clang.gni +@@ -35,6 +35,9 @@ + # Set to true to enable output of ThinLTO index and import files used for + # creating a Chromium MLGO corpus in the ThinLTO case. + lld_emit_indexes_and_imports = false ++ ++ custom_toolchain_clang_base_path = "" ++ custom_toolchain_clang_version = "" + } + + # We don't really need to collect a corpus for the host tools, just for the target. +--- a/build/config/clang/BUILD.gn ++++ b/build/config/clang/BUILD.gn +@@ -5,6 +5,8 @@ + import("//build/config/rust.gni") + import("clang.gni") + ++import("//v8/gni/snapshot_toolchain.gni") ++ + if (is_ios) { + import("//build/config/ios/config.gni") # For `target_environment` + } +@@ -186,6 +186,21 @@ + } + + _clang_lib_dir = "$clang_base_path/lib/clang/$clang_version/lib" ++ ++ if (is_a_target_toolchain && current_toolchain != v8_snapshot_toolchain) { ++ _dir = "linux" ++ _clang_lib_dir = "$custom_toolchain_clang_base_path/lib/clang/$custom_toolchain_clang_version/lib" ++ if (current_cpu == "x64") { ++ _suffix = "-x86_64-android" ++ } else if (current_cpu == "arm") { ++ _suffix = "-arm-android" ++ } else if (current_cpu == "arm64") { ++ _suffix = "-aarch64-android" ++ } else { ++ assert(false) # Unhandled cpu type ++ } ++ } ++ + _lib_file = "${_prefix}clang_rt.${_libname}${_suffix}.${_ext}" + libs = [ "$_clang_lib_dir/$_dir/$_lib_file" ] + } diff --git a/common-files/chromium-patches/compiler-custom-rust-abi-target-triple/6312.patch b/common-files/chromium-patches/compiler-custom-rust-abi-target-triple/6312.patch new file mode 100644 index 0000000000..0a46476b63 --- /dev/null +++ b/common-files/chromium-patches/compiler-custom-rust-abi-target-triple/6312.patch @@ -0,0 +1,42 @@ +--- a/build/config/rust.gni ++++ b/build/config/rust.gni +@@ -7,6 +7,8 @@ + import("//build/config/sanitizers/sanitizers.gni") + import("//build/toolchain/toolchain.gni") + ++import("//v8/gni/snapshot_toolchain.gni") ++ + if (is_android) { + import("//build/config/android/config.gni") + } +@@ -98,6 +100,8 @@ + # a platform. Mostly applicable to Windows, where new versions can handle ANSI + # escape sequences but it's not reliable in general. + force_rustc_color_output = false ++ ++ custom_target_rust_abi_target = "" + } + + # Use a separate declare_args so these variables' defaults can depend on the +@@ -165,7 +169,7 @@ + # TODO(crbug.com/1278030): To build unit tests for Android we need to build + # them as a dylib and put them into an APK. We should reuse all the same logic + # for gtests from the `//testing/test:test` template. +-can_build_rust_unit_tests = toolchain_has_rust && !is_android ++can_build_rust_unit_tests = toolchain_has_rust && !is_android && false + + # We want to store rust_sysroot as a source-relative variable for ninja + # portability. In practice if an external toolchain was specified, it might +@@ -280,6 +284,12 @@ + } + } + ++if (!toolchain_for_rust_host_build_tools && current_toolchain != v8_snapshot_toolchain && current_toolchain != host_toolchain) { ++ if (custom_target_rust_abi_target != "") { ++ rust_abi_target = custom_target_rust_abi_target ++ } ++} ++ + assert(!toolchain_has_rust || rust_abi_target != "") + + # This variable is passed to the Rust libstd build. diff --git a/common-files/chromium-patches/compiler-use-custom-libcxx-for-v8/6312.patch b/common-files/chromium-patches/compiler-use-custom-libcxx-for-v8/6312.patch new file mode 100644 index 0000000000..52468979a1 --- /dev/null +++ b/common-files/chromium-patches/compiler-use-custom-libcxx-for-v8/6312.patch @@ -0,0 +1,20 @@ +--- a/build/config/c++/c++.gni ++++ b/build/config/c++/c++.gni +@@ -6,6 +6,8 @@ + import("//build/config/sanitizers/sanitizers.gni") + import("//build_overrides/build.gni") + ++import("//v8/gni/snapshot_toolchain.gni") ++ + declare_args() { + # Use in-tree libc++ (buildtools/third_party/libc++ and + # buildtools/third_party/libc++abi) instead of the system C++ library for C++ +@@ -42,6 +44,8 @@ + + use_custom_libcxx = + use_custom_libcxx || (use_custom_libcxx_for_host && !is_a_target_toolchain) ++use_custom_libcxx = ++ use_custom_libcxx || (use_custom_libcxx_for_host && current_toolchain == v8_snapshot_toolchain) + use_custom_libcxx = use_custom_libcxx && !is_nacl + + declare_args() { diff --git a/common-files/chromium-patches/metadata.json b/common-files/chromium-patches/metadata.json index ed95aad660..f265ed43ca 100644 --- a/common-files/chromium-patches/metadata.json +++ b/common-files/chromium-patches/metadata.json @@ -296,6 +296,9 @@ "chromium-no-set-process-title/5615.patch": { "start": 5615 }, + "chromium-numerics-byte_conversions-no-std-bit_cast/6312.patch": { + "start": 6312 + }, "chromium-redefine-termios2/5359.patch": { "start": 5359 }, @@ -321,6 +324,12 @@ "start": 5481, "end": 5487 }, + "compiler-clang-lib-dir/6312.patch": { + "start": 6312 + }, + "compiler-custom-rust-abi-target-triple/6312.patch": { + "start": 6312 + }, "compiler-no-unused-but-set-variable/4389.patch": { "start": 4389, "end": 4472 @@ -387,6 +396,9 @@ "compiler-use-android-target/5414.patch": { "start": 5414 }, + "compiler-use-custom-libcxx-for-v8/6312.patch": { + "start": 6312 + }, "cpuinfo-android-arm/5249.patch": { "start": 5249, "end": 6260 @@ -512,6 +524,9 @@ "perfetto-no-pthread_getname_np/6099.patch": { "start": 6099 }, + "performance_manager-context_collection-no-constexpr-operator-equal/6312.patch": { + "start": 6312 + }, "persistent_histogram_allocator-constructor/6045.patch": { "start": 6045 }, @@ -537,24 +552,37 @@ "end": 6260 }, "resource_attribution-query_params-no-constexpr-operator-equal/6261.patch": { - "start": 6261 + "start": 6261, + "end": 6311 + }, + "resource_attribution-query_params-no-constexpr-operator-equal/6312.patch": { + "start": 6312 }, "revert-blink-v8-cxx20/6167.patch": { "start": 6167, "end": 6260 }, "revert-blink-v8-cxx20/6261.patch": { - "start": 6261 + "start": 6261, + "end": 6311 + }, + "revert-blink-v8-cxx20/6312.patch": { + "start": 6312 }, "revert-blink-v8-cxx20-2/6261.patch": { - "start": 6261 + "start": 6261, + "end": 6311 + }, + "revert-blink-v8-cxx20-2/6312.patch": { + "start": 6312 }, "revert-rust-qr-scanner/6167.patch": { "start": 6167, "end": 6260 }, "revert-rust-qr-scanner/6261.patch": { - "start": 6261 + "start": 6261, + "end": 6261 }, "revert-split-out-ios-shared-feed-protos/5615.patch": { "start": 5615, @@ -564,6 +592,9 @@ "start": 9999999, "comment": "Disable since 115.0.5790.98-1" }, + "simple_url_pattern_matcher-no-constexpr-string/6312.patch" : { + "start": 6312 + }, "sql-VirtualCursor-standard-layout/5359.patch": { "start": 5359, "end": 5734 @@ -613,7 +644,9 @@ "end": 5413 }, "undo-internal-alloc/6261.patch": { - "start": 6261 + "start": 6261, + "end": 6261, + "comment": "Disable since 123.0.6312.58, from which clang and libcxx shipped by chromium is used to build host binaries" }, "unity-fix-dynamic-loaded-libraries/4389.patch": { "start": 4389 @@ -795,6 +828,9 @@ "z-iwyu-material_color_utilities-include-cmath/5938.patch": { "start": 5938 }, + "z-iwyu-preview_cancel_reason-include-string/6312.patch": { + "start": 6312 + }, "z-iwyu-sensor_reading-inttypes/5993.patch": { "start": 5993, "end": 6044 diff --git a/common-files/chromium-patches/performance_manager-context_collection-no-constexpr-operator-equal/6312.patch b/common-files/chromium-patches/performance_manager-context_collection-no-constexpr-operator-equal/6312.patch new file mode 100644 index 0000000000..451717f2f6 --- /dev/null +++ b/common-files/chromium-patches/performance_manager-context_collection-no-constexpr-operator-equal/6312.patch @@ -0,0 +1,11 @@ +--- a/components/performance_manager/resource_attribution/context_collection.h ++++ b/components/performance_manager/resource_attribution/context_collection.h +@@ -28,7 +28,7 @@ + ContextCollection(const ContextCollection& other); + ContextCollection& operator=(const ContextCollection& other); + +- friend constexpr bool operator==(const ContextCollection&, ++ friend bool operator==(const ContextCollection&, + const ContextCollection&) = default; + + // Adds `context` to the collection. diff --git a/common-files/chromium-patches/resource_attribution-query_params-no-constexpr-operator-equal/6312.patch b/common-files/chromium-patches/resource_attribution-query_params-no-constexpr-operator-equal/6312.patch new file mode 100644 index 0000000000..954650ac00 --- /dev/null +++ b/common-files/chromium-patches/resource_attribution-query_params-no-constexpr-operator-equal/6312.patch @@ -0,0 +1,13 @@ +error: defaulted definition of equality comparison operator cannot be declared constexpr because it invokes a non-constexpr comparison function + +--- a/components/performance_manager/resource_attribution/query_params.h ++++ b/components/performance_manager/resource_attribution/query_params.h +@@ -67,7 +67,7 @@ + QueryParams(const QueryParams& other); + QueryParams& operator=(const QueryParams& other); + +- friend constexpr bool operator==(const QueryParams&, ++ friend bool operator==(const QueryParams&, + const QueryParams&) = default; + + // Resource types to measure. diff --git a/common-files/chromium-patches/revert-blink-v8-cxx20-2/6312.patch b/common-files/chromium-patches/revert-blink-v8-cxx20-2/6312.patch new file mode 100644 index 0000000000..dfed229694 --- /dev/null +++ b/common-files/chromium-patches/revert-blink-v8-cxx20-2/6312.patch @@ -0,0 +1,121 @@ +This reverts https://github.com/chromium/chromium/commit/ce71348a09f6689dd01a68db64b172191d0182d8 + +--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h ++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h +@@ -110,12 +110,6 @@ + static constexpr bool has_null_value = + bindings::NativeValueTraitsHasNullValue::value; + +- // 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 + static decltype(auto) ArgumentValue(v8::Isolate* isolate, + int argument_index, +--- 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 +@@ -1050,86 +1050,11 @@ + return {}; + } + +- using ResultType = typename NativeValueTraits>::ImplType; +- ResultType result; ++ typename NativeValueTraits>::ImplType result; + result.ReserveInitialCapacity(length); + v8::Local 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) { +- 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_element, +- void* data) { +- CallbackData* callback_data = reinterpret_cast(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()) +- ->template ToImpl(); +- callback_data->result.push_back(std::move(value)); +- return v8::Array::CallbackResult::kContinue; +- } +- } +- auto&& element = NativeValueTraits::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_element; +@@ -1589,13 +1514,6 @@ + T, + typename std::enable_if_t::value>> + : public NativeValueTraitsBase { +- // 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 value, + ExceptionState& exception_state) { diff --git a/common-files/chromium-patches/revert-blink-v8-cxx20/6312.patch b/common-files/chromium-patches/revert-blink-v8-cxx20/6312.patch new file mode 100644 index 0000000000..be816377d5 --- /dev/null +++ b/common-files/chromium-patches/revert-blink-v8-cxx20/6312.patch @@ -0,0 +1,725 @@ +This reverts https://github.com/chromium/chromium/commit/940af9f2c87b436559b97c53763aa9eaaf1254eb + +--- 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,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 + #include + + #include "third_party/blink/renderer/bindings/core/v8/idl_types_base.h" +@@ -31,7 +30,7 @@ + // return toInt32(isolate, value, exceptionState, NormalConversion); + // } + // } +-template ++template + struct NativeValueTraits; + + // This declaration serves only as a blueprint for specializations: the +@@ -46,15 +45,22 @@ + + namespace bindings { + ++template ++struct NativeValueTraitsHasIsNull : std::false_type {}; ++ + template +-struct ImplTypeFor { +- using type = T; +-}; ++struct NativeValueTraitsHasIsNull< ++ T, ++ std::void_t().IsNull())>> : std::true_type {}; + + template +- requires std::derived_from +-struct ImplTypeFor { +- 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::value || ++ // Pointer types have nullptr as IDL null value. ++ std::is_pointer::value; + }; + + } // namespace bindings +@@ -72,17 +78,37 @@ + // 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 ++template + struct NativeValueTraitsBase { + STATIC_ONLY(NativeValueTraitsBase); + +- using ImplType = bindings::ImplTypeFor::type; ++ using ImplType = T; ++ ++ static constexpr bool has_null_value = ++ bindings::NativeValueTraitsHasNullValue::value; ++ ++ template ++ static decltype(auto) ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state, ++ ExtraArgs... extra_args) { ++ return NativeValueTraits>::NativeValue( ++ isolate, value, exception_state, ++ std::forward(extra_args)...); ++ } ++}; ++ ++template ++struct NativeValueTraitsBase< ++ T, ++ std::enable_if_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 || +- requires(ImplType value) { value.IsNull(); }; ++ bindings::NativeValueTraitsHasNullValue::value; + + // This should only be true for certain subclasses of ScriptWrappable + // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with +--- 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,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 @@ + // ArrayBufferView + + template +- requires std::derived_from +-NotShared NativeValueTraits>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++NotShared NativeValueTraits< ++ NotShared, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, +@@ -712,12 +712,13 @@ + } + + template +- requires std::derived_from +-NotShared NativeValueTraits>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++NotShared NativeValueTraits< ++ NotShared, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, +@@ -728,11 +729,12 @@ + // [AllowShared] ArrayBufferView + + template +- requires std::derived_from +-MaybeShared NativeValueTraits>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ MaybeShared, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl>, + ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, +@@ -741,12 +743,13 @@ + } + + template +- requires std::derived_from +-MaybeShared NativeValueTraits>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ MaybeShared, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl>, + ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, +@@ -757,12 +760,12 @@ + // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView + + template +- requires std::derived_from +-MaybeShared +-NativeValueTraits>>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ IDLBufferSourceTypeNoSizeLimit>, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck, +@@ -771,12 +774,13 @@ + } + + template +- requires std::derived_from +-MaybeShared NativeValueTraits>>::ArgumentValue(v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ IDLBufferSourceTypeNoSizeLimit>, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck, +@@ -787,11 +791,12 @@ + // Nullable ArrayBufferView + + template +- requires std::derived_from +-NotShared NativeValueTraits>>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++NotShared NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, +@@ -800,12 +805,13 @@ + } + + template +- requires std::derived_from +-NotShared NativeValueTraits>>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++NotShared NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl< + RecipeTrait>, ToDOMViewType, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, +@@ -816,11 +822,12 @@ NotShared NativeValueTraits +- requires std::derived_from +-MaybeShared NativeValueTraits>>::NativeValue( +- v8::Isolate* isolate, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>>:: ++ NativeValue(v8::Isolate* isolate, ++ v8::Local value, ++ ExceptionState& exception_state) { + return NativeValueImpl>, + ToDOMViewType, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, +@@ -829,12 +836,13 @@ + } + + template +- requires std::derived_from +-MaybeShared NativeValueTraits>>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++MaybeShared NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl>, + ToDOMViewType, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, +@@ -845,9 +853,9 @@ + // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView + + template +- requires std::derived_from +-MaybeShared +-NativeValueTraits>>>:: ++MaybeShared NativeValueTraits< ++ IDLNullable>>, ++ typename std::enable_if_t::value>>:: + ArgumentValue(v8::Isolate* isolate, + int argument_index, + v8::Local value, +@@ -862,11 +870,13 @@ + // [AllowShared, FlexibleArrayBufferView] ArrayBufferView + + template +- requires std::derived_from +-T NativeValueTraits::ArgumentValue(v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++T NativeValueTraits::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl, ToFlexibleArrayBufferView, + Nullablity::kIsNotNullable, BufferSizeCheck::kCheck, + ResizableAllowance::kDisallowResizable, +@@ -878,12 +888,13 @@ + // ArrayBufferView + + template +- requires std::derived_from +-T NativeValueTraits>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++T NativeValueTraits, ++ typename std::enable_if_t< ++ std::is_base_of::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl< + RecipeTrait, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable, + BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable, +@@ -894,12 +905,13 @@ + // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView + + template +- requires std::derived_from +-T NativeValueTraits>::ArgumentValue( +- v8::Isolate* isolate, +- int argument_index, +- v8::Local value, +- ExceptionState& exception_state) { ++T NativeValueTraits, ++ typename std::enable_if_t< ++ std::is_base_of::value>>:: ++ ArgumentValue(v8::Isolate* isolate, ++ int argument_index, ++ v8::Local value, ++ ExceptionState& exception_state) { + return ArgumentValueImpl, ToFlexibleArrayBufferView, + Nullablity::kIsNullable, BufferSizeCheck::kCheck, + ResizableAllowance::kDisallowResizable, +--- 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,9 +5,7 @@ + #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 + #include +-#include + + #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 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> { + // NotShared or MaybeShared should be used instead. + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -749,8 +747,9 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits> { ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> { + // NotShared or MaybeShared should be used instead. + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -762,8 +761,9 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ NotShared, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static NotShared NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -776,8 +776,9 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits>> ++struct NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static NotShared NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -790,8 +791,9 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ MaybeShared, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static MaybeShared NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -804,8 +806,9 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits>> ++struct NativeValueTraits< ++ IDLBufferSourceTypeNoSizeLimit>, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + // FlexibleArrayBufferView uses this in its implementation, so we cannot + // delete it. +@@ -820,8 +823,9 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits>> ++struct NativeValueTraits< ++ IDLNullable>, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static MaybeShared NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -834,9 +838,9 @@ + }; + + template +- requires std::derived_from + struct NativeValueTraits< +- IDLNullable>>> ++ IDLNullable>>, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + // BufferSourceTypeNoSizeLimit must be used only as arguments. + static MaybeShared NativeValue(v8::Isolate* isolate, +@@ -850,8 +854,11 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t< ++ std::is_base_of::value>> ++ : public NativeValueTraitsBase { + // FlexibleArrayBufferView must be used only as arguments. + static T NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -864,8 +871,10 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLBufferSourceTypeNoSizeLimit, ++ typename std::enable_if_t< ++ std::is_base_of::value>> + : public NativeValueTraitsBase { + // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only + // as arguments. +@@ -880,8 +889,11 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits> : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t< ++ std::is_base_of::value>> ++ : public NativeValueTraitsBase { + // FlexibleArrayBufferView must be used only as arguments. + static T NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -1217,8 +1229,9 @@ + } + + template +- requires NativeValueTraits>::has_null_value +-struct NativeValueTraits>> ++struct NativeValueTraits>, ++ typename std::enable_if_t< ++ NativeValueTraits>::has_null_value>> + : public NativeValueTraitsBase>*> { + using ImplType = typename NativeValueTraits>::ImplType*; + +@@ -1294,8 +1307,9 @@ + : public NativeValueTraits> {}; + + template +- requires NativeValueTraits>::has_null_value +-struct NativeValueTraits>> ++struct NativeValueTraits>, ++ typename std::enable_if_t< ++ NativeValueTraits>::has_null_value>> + : public NativeValueTraits>> {}; + + // Record types +@@ -1425,8 +1439,10 @@ + + // Callback function types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1449,8 +1465,9 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -1479,8 +1496,10 @@ + + // Callback interface types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1504,8 +1523,9 @@ + + // Interface types + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -1534,8 +1554,11 @@ + + // Dictionary types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t< ++ std::is_base_of::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1546,11 +1569,14 @@ + // We don't support nullable dictionary types in general since it's quite + // confusing and often misused. + template +- requires std::derived_from && +- (std::same_as || +- std::same_as || +- std::same_as) +-struct NativeValueTraits> : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t< ++ std::is_base_of::value && ++ (std::is_same::value || ++ std::is_same::value || ++ std::is_same::value)>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1562,8 +1588,11 @@ + + // Enumeration types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t< ++ std::is_base_of::value>> ++ : public NativeValueTraitsBase { + static T NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1573,8 +1602,10 @@ + + // Interface types + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + // 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 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> + : public NativeValueTraitsBase> { + static inline T* NativeValue(v8::Isolate* isolate, + v8::Local value, +@@ -1647,8 +1679,10 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ T, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1664,8 +1698,10 @@ + }; + + template +- requires std::derived_from +-struct NativeValueTraits> : public NativeValueTraitsBase { ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::value>> ++ : public NativeValueTraitsBase { + static T* NativeValue(v8::Isolate* isolate, + v8::Local value, + ExceptionState& exception_state) { +@@ -1686,8 +1722,9 @@ + + // Nullable types + template +- requires(!NativeValueTraits::has_null_value) +-struct NativeValueTraits> ++struct NativeValueTraits< ++ IDLNullable, ++ typename std::enable_if_t::has_null_value>> + : public NativeValueTraitsBase> { + // https://webidl.spec.whatwg.org/#es-nullable-type + using ImplType = +@@ -1719,8 +1756,9 @@ + + // Optional types + template +- requires std::is_arithmetic_v::ImplType> +-struct NativeValueTraits> ++struct NativeValueTraits, ++ typename std::enable_if_t::ImplType>::value>> + : public NativeValueTraitsBase::ImplType> { + using ImplType = typename NativeValueTraits::ImplType; + +@@ -1742,8 +1780,9 @@ + }; + + template +- requires std::is_pointer_v::ImplType> +-struct NativeValueTraits> ++struct NativeValueTraits, ++ typename std::enable_if_t::ImplType>::value>> + : public NativeValueTraitsBase::ImplType> { + using ImplType = typename NativeValueTraits::ImplType; + diff --git a/common-files/chromium-patches/simple_url_pattern_matcher-no-constexpr-string/6312.patch b/common-files/chromium-patches/simple_url_pattern_matcher-no-constexpr-string/6312.patch new file mode 100644 index 0000000000..7c31db4c02 --- /dev/null +++ b/common-files/chromium-patches/simple_url_pattern_matcher-no-constexpr-string/6312.patch @@ -0,0 +1,23 @@ +--- a/services/network/shared_dictionary/simple_url_pattern_matcher.cc ++++ b/services/network/shared_dictionary/simple_url_pattern_matcher.cc +@@ -28,17 +28,17 @@ + namespace { + + // https://urlpattern.spec.whatwg.org/#default-options +-constexpr liburlpattern::Options kDefaultOptions = {.delimiter_list = "", ++static const inline liburlpattern::Options kDefaultOptions = {.delimiter_list = "", + .prefix_list = "", + .sensitive = true, + .strict = true}; + // https://urlpattern.spec.whatwg.org/#hostname-options +-constexpr liburlpattern::Options kHostnameOptions = {.delimiter_list = ".", ++static const inline liburlpattern::Options kHostnameOptions = {.delimiter_list = ".", + .prefix_list = "", + .sensitive = true, + .strict = true}; + // https://urlpattern.spec.whatwg.org/#pathname-options +-constexpr liburlpattern::Options kPathnameOptions = {.delimiter_list = "/", ++static const inline liburlpattern::Options kPathnameOptions = {.delimiter_list = "/", + .prefix_list = "/", + .sensitive = true, + .strict = true}; diff --git a/common-files/chromium-patches/sysroot-patches/libstdcxx3-10-optional-struct.diff b/common-files/chromium-patches/sysroot-patches/libstdcxx3-10-optional-struct.diff new file mode 100644 index 0000000000..6030dad59e --- /dev/null +++ b/common-files/chromium-patches/sysroot-patches/libstdcxx3-10-optional-struct.diff @@ -0,0 +1,42 @@ +https://sources.debian.org/patches/chromium/122.0.6261.128-1/fixes/absl-optional.patch + +--- a/usr/include/c++/10/optional ++++ b/usr/include/c++/10/optional +@@ -478,8 +478,12 @@ + constexpr _Optional_base() = default; + + // Constructors for engaged optionals. ++#if defined(__clang__) ++ template ++#else + template, bool> = false> ++#endif + constexpr explicit _Optional_base(in_place_t, _Args&&... __args) + : _M_payload(in_place, + std::forward<_Args>(__args)...) { } +@@ -757,8 +761,12 @@ + emplace(std::move(*__t)); + } + ++#if defined(__clang__) ++ template ++#else + template> = false> ++#endif + explicit constexpr + optional(in_place_t, _Args&&... __args) + : _Base(std::in_place, std::forward<_Args>(__args)...) { } +@@ -844,7 +852,11 @@ + } + + template ++#if defined(__clang__) ++ _Tp& ++#else + enable_if_t, _Tp&> ++#endif + emplace(_Args&&... __args) + { + this->_M_reset(); diff --git a/common-files/chromium-patches/z-iwyu-preview_cancel_reason-include-string/6312.patch b/common-files/chromium-patches/z-iwyu-preview_cancel_reason-include-string/6312.patch new file mode 100644 index 0000000000..08355616ae --- /dev/null +++ b/common-files/chromium-patches/z-iwyu-preview_cancel_reason-include-string/6312.patch @@ -0,0 +1,11 @@ +--- a/content/public/browser/preview_cancel_reason.h ++++ b/content/public/browser/preview_cancel_reason.h +@@ -5,6 +5,8 @@ + #ifndef CONTENT_PUBLIC_BROWSER_PREVIEW_CANCEL_REASON_H_ + #define CONTENT_PUBLIC_BROWSER_PREVIEW_CANCEL_REASON_H_ + ++#include ++ + #include "content/common/content_export.h" + #include "third_party/abseil-cpp/absl/types/variant.h" +