* High CVE-2024-4331: Use after free in Picture In Picture * High CVE-2024-4368: Use after free in Dawn - use system highway - fixed bz#2277228 - chromium wrapper causes library issues (symbol lookup error) - use system dav1di8e
parent
534e137e21
commit
4dfc23a68a
@ -1,23 +0,0 @@
|
|||||||
From 61dcf0ff9603e8f5b0a859fb0837c51527ebae43 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Colin Samples <colin.samples+git@gmail.com>
|
|
||||||
Date: Fri, 1 Nov 2019 11:50:52 -0400
|
|
||||||
Subject: [PATCH] Add PPC64 support for libdav1d
|
|
||||||
|
|
||||||
---
|
|
||||||
third_party/dav1d/BUILD.gn | 21 ++++++++++++++++++++
|
|
||||||
third_party/dav1d/generate_configs.py | 28 ++-------------------------
|
|
||||||
third_party/dav1d/generate_source.py | 2 ++
|
|
||||||
3 files changed, 25 insertions(+), 26 deletions(-)
|
|
||||||
|
|
||||||
Index: chromium-120.0.6099.71/third_party/dav1d/generate_configs.py
|
|
||||||
===================================================================
|
|
||||||
--- chromium-120.0.6099.71.orig/third_party/dav1d/generate_configs.py
|
|
||||||
+++ chromium-120.0.6099.71/third_party/dav1d/generate_configs.py
|
|
||||||
@@ -203,6 +203,7 @@ def main():
|
|
||||||
linux_env = os.environ
|
|
||||||
linux_env['CC'] = 'clang'
|
|
||||||
|
|
||||||
+ GenerateConfig('config/linux/ppc64', linux_env)
|
|
||||||
GenerateConfig('config/linux/x64', linux_env)
|
|
||||||
|
|
||||||
noasm_dir = 'config/linux-noasm/x64'
|
|
@ -1,14 +0,0 @@
|
|||||||
Index: chromium-120.0.6099.71/third_party/highway/BUILD.gn
|
|
||||||
===================================================================
|
|
||||||
--- chromium-120.0.6099.71.orig/third_party/highway/BUILD.gn
|
|
||||||
+++ chromium-120.0.6099.71/third_party/highway/BUILD.gn
|
|
||||||
@@ -13,6 +13,9 @@ config("libhwy_external_config") {
|
|
||||||
# explicitly disabling AVX2 and AVX3 targets.
|
|
||||||
defines += [ "HWY_BROKEN_TARGETS=(HWY_AVX2|HWY_AVX3)" ]
|
|
||||||
}
|
|
||||||
+ if (target_cpu == "ppc64") {
|
|
||||||
+ defines += [ "TOOLCHAIN_MISS_ASM_HWCAP_H" ]
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
source_set("libhwy") {
|
|
@ -1,33 +0,0 @@
|
|||||||
From e14024659e0fc2af3df6ec56ce39a8e93b75722d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Colin Samples <colin.samples+git@gmail.com>
|
|
||||||
Date: Sun, 8 Dec 2019 19:25:02 -0500
|
|
||||||
Subject: [PATCH] Fix libdav1d compilation on clang ppc
|
|
||||||
|
|
||||||
---
|
|
||||||
src/ppc/dav1d_types.h | 15 +++++++++++++++
|
|
||||||
1 file changed, 15 insertions(+)
|
|
||||||
|
|
||||||
Index: chromium-120.0.6099.71/third_party/dav1d/libdav1d/src/ppc/dav1d_types.h
|
|
||||||
===================================================================
|
|
||||||
--- chromium-120.0.6099.71.orig/third_party/dav1d/libdav1d/src/ppc/dav1d_types.h
|
|
||||||
+++ chromium-120.0.6099.71/third_party/dav1d/libdav1d/src/ppc/dav1d_types.h
|
|
||||||
@@ -51,4 +51,19 @@
|
|
||||||
#define u16l_to_i32(v) ((i32x4) vec_mergel((u16x8) v, vec_splat_u16(0)))
|
|
||||||
#define i16l_to_i32(v) ((i32x4) vec_unpackl((i16x8)v))
|
|
||||||
|
|
||||||
+#if defined(__clang__)
|
|
||||||
+#undef vec_splats
|
|
||||||
+#define vec_splats(N) \
|
|
||||||
+ _Generic((N), \
|
|
||||||
+ unsigned char: ((u8x16)(N)), \
|
|
||||||
+ signed char: ((i8x16)(N)), \
|
|
||||||
+ unsigned short: ((u16x8)(N)), \
|
|
||||||
+ signed short: ((i16x8)(N)), \
|
|
||||||
+ unsigned int: ((u32x4)(N)), \
|
|
||||||
+ signed int: ((i32x4)(N)), \
|
|
||||||
+ unsigned long long: ((u64x2)(N)), \
|
|
||||||
+ signed long long: ((i64x2)(N)) \
|
|
||||||
+ )
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#endif /* DAV1D_SRC_PPC_TYPES_H */
|
|
@ -1,101 +0,0 @@
|
|||||||
Index: chromium-120.0.6099.71/third_party/highway/src/hwy/ops/ppc_vsx-inl.h
|
|
||||||
===================================================================
|
|
||||||
--- chromium-120.0.6099.71.orig/third_party/highway/src/hwy/ops/ppc_vsx-inl.h
|
|
||||||
+++ chromium-120.0.6099.71/third_party/highway/src/hwy/ops/ppc_vsx-inl.h
|
|
||||||
@@ -36,6 +36,8 @@
|
|
||||||
|
|
||||||
#include "hwy/ops/shared-inl.h"
|
|
||||||
|
|
||||||
+#undef __SIZEOF_INT128__
|
|
||||||
+
|
|
||||||
HWY_BEFORE_NAMESPACE();
|
|
||||||
namespace hwy {
|
|
||||||
namespace HWY_NAMESPACE {
|
|
||||||
@@ -2844,7 +2846,6 @@ struct CompressIsPartition {
|
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
|
|
||||||
-#if HWY_TARGET > HWY_PPC10 || __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
|
|
||||||
// fallback for missing vec_extractm
|
|
||||||
template <size_t N>
|
|
||||||
HWY_INLINE uint64_t ExtractSignBits(Vec128<uint8_t, N> sign_bits,
|
|
||||||
@@ -2857,22 +2858,16 @@ HWY_INLINE uint64_t ExtractSignBits(Vec1
|
|
||||||
return extracted.raw[__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__];
|
|
||||||
}
|
|
||||||
|
|
||||||
-#endif // HWY_TARGET > HWY_PPC10
|
|
||||||
-
|
|
||||||
template <typename T, size_t N>
|
|
||||||
HWY_INLINE uint64_t BitsFromMask(hwy::SizeTag<1> /*tag*/,
|
|
||||||
Mask128<T, N> mask) {
|
|
||||||
const DFromM<decltype(mask)> d;
|
|
||||||
const Repartition<uint8_t, decltype(d)> du8;
|
|
||||||
const VFromD<decltype(du8)> sign_bits = BitCast(du8, VecFromMask(d, mask));
|
|
||||||
-#if HWY_TARGET <= HWY_PPC10 && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
||||||
- return static_cast<uint64_t>(vec_extractm(sign_bits.raw));
|
|
||||||
-#else
|
|
||||||
const __vector unsigned char kBitShuffle = {
|
|
||||||
120, 112, 104, 96, 88, 80, 72, 64, 56, 48, 40, 32, 24, 16, 8, 0
|
|
||||||
};
|
|
||||||
return ExtractSignBits(sign_bits, kBitShuffle);
|
|
||||||
-#endif // HWY_TARGET <= HWY_PPC10
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, size_t N>
|
|
||||||
@@ -2882,10 +2877,6 @@ HWY_INLINE uint64_t BitsFromMask(hwy::Si
|
|
||||||
const Repartition<uint8_t, decltype(d)> du8;
|
|
||||||
const VFromD<decltype(du8)> sign_bits = BitCast(du8, VecFromMask(d, mask));
|
|
||||||
|
|
||||||
-#if HWY_TARGET <= HWY_PPC10 && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
||||||
- const RebindToUnsigned<decltype(d)> du;
|
|
||||||
- return static_cast<uint64_t>(vec_extractm(BitCast(du, sign_bits).raw));
|
|
||||||
-#else
|
|
||||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
||||||
const __vector unsigned char kBitShuffle = {
|
|
||||||
112, 96, 80, 64, 48, 32, 16, 0, 128, 128, 128, 128, 128, 128, 128, 128};
|
|
||||||
@@ -2894,7 +2885,6 @@ HWY_INLINE uint64_t BitsFromMask(hwy::Si
|
|
||||||
128, 128, 128, 128, 128, 128, 128, 128, 112, 96, 80, 64, 48, 32, 16, 0};
|
|
||||||
#endif
|
|
||||||
return ExtractSignBits(sign_bits, kBitShuffle);
|
|
||||||
-#endif // HWY_TARGET <= HWY_PPC10
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, size_t N>
|
|
||||||
@@ -2903,10 +2893,6 @@ HWY_INLINE uint64_t BitsFromMask(hwy::Si
|
|
||||||
const DFromM<decltype(mask)> d;
|
|
||||||
const Repartition<uint8_t, decltype(d)> du8;
|
|
||||||
const VFromD<decltype(du8)> sign_bits = BitCast(du8, VecFromMask(d, mask));
|
|
||||||
-#if HWY_TARGET <= HWY_PPC10 && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
||||||
- const RebindToUnsigned<decltype(d)> du;
|
|
||||||
- return static_cast<uint64_t>(vec_extractm(BitCast(du, sign_bits).raw));
|
|
||||||
-#else
|
|
||||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
||||||
const __vector unsigned char kBitShuffle = {
|
|
||||||
96, 64, 32, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128};
|
|
||||||
@@ -2915,7 +2901,6 @@ HWY_INLINE uint64_t BitsFromMask(hwy::Si
|
|
||||||
128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 96, 64, 32, 0};
|
|
||||||
#endif
|
|
||||||
return ExtractSignBits(sign_bits, kBitShuffle);
|
|
||||||
-#endif // HWY_TARGET <= HWY_PPC10
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, size_t N>
|
|
||||||
@@ -2924,10 +2909,6 @@ HWY_INLINE uint64_t BitsFromMask(hwy::Si
|
|
||||||
const DFromM<decltype(mask)> d;
|
|
||||||
const Repartition<uint8_t, decltype(d)> du8;
|
|
||||||
const VFromD<decltype(du8)> sign_bits = BitCast(du8, VecFromMask(d, mask));
|
|
||||||
-#if HWY_TARGET <= HWY_PPC10 && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
||||||
- const RebindToUnsigned<decltype(d)> du;
|
|
||||||
- return static_cast<uint64_t>(vec_extractm(BitCast(du, sign_bits).raw));
|
|
||||||
-#else
|
|
||||||
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
|
||||||
const __vector unsigned char kBitShuffle = {64, 0, 128, 128, 128, 128,
|
|
||||||
128, 128, 128, 128, 128, 128,
|
|
||||||
@@ -2938,7 +2919,6 @@ HWY_INLINE uint64_t BitsFromMask(hwy::Si
|
|
||||||
128, 128, 64, 0};
|
|
||||||
#endif
|
|
||||||
return ExtractSignBits(sign_bits, kBitShuffle);
|
|
||||||
-#endif // HWY_TARGET <= HWY_PPC10
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns the lowest N of the mask bits.
|
|
File diff suppressed because it is too large
Load Diff
@ -1,35 +0,0 @@
|
|||||||
--- a/third_party/libvpx/libvpx_srcs.gni
|
|
||||||
+++ b/third_party/libvpx/libvpx_srcs.gni
|
|
||||||
@@ -4302,6 +4302,7 @@
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/common/vp9_seg_common.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/common/vp9_thread_common.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/common/vp9_tile_common.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vp9/common/ppc/vp9_idct_vsx.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/decoder/vp9_decodeframe.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/decoder/vp9_decodemv.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/decoder/vp9_decoder.c",
|
|
||||||
@@ -4340,6 +4341,7 @@
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/encoder/vp9_svc_layercontext.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/encoder/vp9_tokenize.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/encoder/vp9_treewriter.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vp9/encoder/ppc/vp9_quantize_vsx.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/vp9_cx_iface.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/vp9_dx_iface.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vp9/vp9_iface_common.c",
|
|
||||||
@@ -4368,6 +4370,16 @@
|
|
||||||
"//third_party/libvpx/source/libvpx/vpx_dsp/variance.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vpx_dsp/vpx_convolve.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vpx_dsp/vpx_dsp_rtcd.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/deblock_vsx.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/fdct32x32_vsx.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/hadamard_vsx.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/intrapred_vsx.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/inv_txfm_vsx.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/quantize_vsx.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/sad_vsx.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/subtract_vsx.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/variance_vsx.c",
|
|
||||||
+ "//third_party/libvpx/source/libvpx/vpx_dsp/ppc/vpx_convolve_vsx.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vpx_mem/vpx_mem.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vpx_ports/ppc_cpudetect.c",
|
|
||||||
"//third_party/libvpx/source/libvpx/vpx_scale/generic/gen_scalers.c",
|
|
@ -1,43 +0,0 @@
|
|||||||
Index: chromium-120.0.6099.71/third_party/dav1d/config/linux/ppc64/config.h
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null
|
|
||||||
+++ chromium-120.0.6099.71/third_party/dav1d/config/linux/ppc64/config.h
|
|
||||||
@@ -0,0 +1,38 @@
|
|
||||||
+/*
|
|
||||||
+ * Autogenerated by the Meson build system.
|
|
||||||
+ * Do not edit, your changes will be lost.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+#pragma once
|
|
||||||
+
|
|
||||||
+#define ARCH_AARCH64 0
|
|
||||||
+
|
|
||||||
+#define ARCH_ARM 0
|
|
||||||
+
|
|
||||||
+#define ARCH_PPC64LE 1
|
|
||||||
+
|
|
||||||
+#define ARCH_X86 0
|
|
||||||
+
|
|
||||||
+#define ARCH_X86_32 0
|
|
||||||
+
|
|
||||||
+#define ARCH_X86_64 0
|
|
||||||
+
|
|
||||||
+#define CONFIG_16BPC 1
|
|
||||||
+
|
|
||||||
+#define CONFIG_8BPC 1
|
|
||||||
+
|
|
||||||
+// #define CONFIG_LOG 1 -- Logging is controlled by Chromium
|
|
||||||
+
|
|
||||||
+#define ENDIANNESS_BIG 0
|
|
||||||
+
|
|
||||||
+#define HAVE_ASM 1
|
|
||||||
+
|
|
||||||
+#define HAVE_CLOCK_GETTIME 1
|
|
||||||
+
|
|
||||||
+#define HAVE_DLSYM 1
|
|
||||||
+
|
|
||||||
+#define HAVE_GETAUXVAL 1
|
|
||||||
+
|
|
||||||
+#define HAVE_POSIX_MEMALIGN 1
|
|
||||||
+
|
|
||||||
+#define HAVE_UNISTD_H 1
|
|
@ -1,88 +0,0 @@
|
|||||||
commit c7f4c58f896a651eba80ad805ebdb49d19ebdbd4
|
|
||||||
Author: Tom Anderson <thomasanderson@chromium.org>
|
|
||||||
Date: Wed Mar 20 00:00:12 2024 +0000
|
|
||||||
|
|
||||||
Fix --ozone-platform-hint
|
|
||||||
|
|
||||||
This fixes a regression after r1269993 which moved ozone platform
|
|
||||||
early initialization before the ozone platform hint flag was
|
|
||||||
processed. This CL ensures the flag processing happens even earlier.
|
|
||||||
|
|
||||||
R=sky
|
|
||||||
|
|
||||||
Change-Id: Icc9649beb0b86753265be2b6cdf3059611eb410f
|
|
||||||
Bug: None
|
|
||||||
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5375669
|
|
||||||
Reviewed-by: Scott Violet <sky@chromium.org>
|
|
||||||
Auto-Submit: Thomas Anderson <thomasanderson@chromium.org>
|
|
||||||
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
|
|
||||||
Cr-Commit-Position: refs/heads/main@{#1275306}
|
|
||||||
|
|
||||||
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc
|
|
||||||
index 73b6ab0934b14..0b4c44be679d0 100644
|
|
||||||
--- a/chrome/app/chrome_main_delegate.cc
|
|
||||||
+++ b/chrome/app/chrome_main_delegate.cc
|
|
||||||
@@ -249,6 +249,9 @@
|
|
||||||
#include "base/scoped_add_feature_flags.h"
|
|
||||||
#include "ui/base/ui_base_features.h"
|
|
||||||
#include "ui/ozone/public/ozone_platform.h"
|
|
||||||
+#if BUILDFLAG(IS_LINUX)
|
|
||||||
+#include "chrome/browser/chrome_browser_main_extra_parts_linux.h"
|
|
||||||
+#endif
|
|
||||||
#endif // BUILDFLAG(IS_OZONE)
|
|
||||||
|
|
||||||
base::LazyInstance<ChromeContentGpuClient>::DestructorAtExit
|
|
||||||
@@ -959,6 +962,9 @@ std::optional<int> ChromeMainDelegate::PostEarlyInitialization(
|
|
||||||
// Initialize Ozone platform and add required feature flags as per platform's
|
|
||||||
// properties. Must be added before feature list is created otherwise the
|
|
||||||
// added flag won't be picked up.
|
|
||||||
+#if BUILDFLAG(IS_LINUX)
|
|
||||||
+ ChromeBrowserMainExtraPartsLinux::InitOzonePlatformHint();
|
|
||||||
+#endif
|
|
||||||
ui::OzonePlatform::PreEarlyInitialization();
|
|
||||||
AddFeatureFlagsToCommandLine();
|
|
||||||
#endif // BUILDFLAG(IS_OZONE)
|
|
||||||
diff --git a/chrome/browser/chrome_browser_main_extra_parts_linux.cc b/chrome/browser/chrome_browser_main_extra_parts_linux.cc
|
|
||||||
index dba7b116ecaa0..ea0487022dcdc 100644
|
|
||||||
--- a/chrome/browser/chrome_browser_main_extra_parts_linux.cc
|
|
||||||
+++ b/chrome/browser/chrome_browser_main_extra_parts_linux.cc
|
|
||||||
@@ -168,7 +168,13 @@ ChromeBrowserMainExtraPartsLinux::ChromeBrowserMainExtraPartsLinux() = default;
|
|
||||||
|
|
||||||
ChromeBrowserMainExtraPartsLinux::~ChromeBrowserMainExtraPartsLinux() = default;
|
|
||||||
|
|
||||||
-void ChromeBrowserMainExtraPartsLinux::PreEarlyInitialization() {
|
|
||||||
+void ChromeBrowserMainExtraPartsLinux::PostBrowserStart() {
|
|
||||||
+ RecordDisplayServerProtocolSupport();
|
|
||||||
+ ChromeBrowserMainExtraPartsOzone::PostBrowserStart();
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+// static
|
|
||||||
+void ChromeBrowserMainExtraPartsLinux::InitOzonePlatformHint() {
|
|
||||||
#if BUILDFLAG(IS_LINUX)
|
|
||||||
// On the desktop, we fix the platform name if necessary.
|
|
||||||
// See https://crbug.com/1246928.
|
|
||||||
@@ -189,8 +195,3 @@ void ChromeBrowserMainExtraPartsLinux::PreEarlyInitialization() {
|
|
||||||
}
|
|
||||||
#endif // BUILDFLAG(IS_LINUX)
|
|
||||||
}
|
|
||||||
-
|
|
||||||
-void ChromeBrowserMainExtraPartsLinux::PostBrowserStart() {
|
|
||||||
- RecordDisplayServerProtocolSupport();
|
|
||||||
- ChromeBrowserMainExtraPartsOzone::PostBrowserStart();
|
|
||||||
-}
|
|
||||||
diff --git a/chrome/browser/chrome_browser_main_extra_parts_linux.h b/chrome/browser/chrome_browser_main_extra_parts_linux.h
|
|
||||||
index 3847bd2090e28..4f188a7bdfe38 100644
|
|
||||||
--- a/chrome/browser/chrome_browser_main_extra_parts_linux.h
|
|
||||||
+++ b/chrome/browser/chrome_browser_main_extra_parts_linux.h
|
|
||||||
@@ -17,9 +17,10 @@ class ChromeBrowserMainExtraPartsLinux
|
|
||||||
const ChromeBrowserMainExtraPartsLinux&) = delete;
|
|
||||||
~ChromeBrowserMainExtraPartsLinux() override;
|
|
||||||
|
|
||||||
+ static void InitOzonePlatformHint();
|
|
||||||
+
|
|
||||||
private:
|
|
||||||
// ChromeBrowserMainExtraParts overrides.
|
|
||||||
- void PreEarlyInitialization() override;
|
|
||||||
void PostBrowserStart() override;
|
|
||||||
};
|
|
||||||
|
|
Loading…
Reference in new issue