From 1fbf677e9c702b0c2fc14f9bb0311d9b10825cc6 Mon Sep 17 00:00:00 2001 From: Michael Catanzaro Date: Mon, 24 Mar 2025 16:10:25 -0500 Subject: [PATCH] Revert "[GLib] Remove all GLIB_CHECK_VERSION conditionals" This reverts commit 85b637b69f1c3a6242420b198d1c173477ce0f22. --- Source/WTF/wtf/URL.h | 4 ++-- Source/WTF/wtf/glib/GRefPtr.cpp | 2 ++ Source/WTF/wtf/glib/GRefPtr.h | 3 +++ Source/WTF/wtf/glib/SocketConnection.cpp | 13 +++++++++++++ Source/WTF/wtf/glib/URLGLib.cpp | 2 ++ Source/WebCore/platform/LowPowerModeNotifier.h | 2 ++ .../platform/glib/LowPowerModeNotifierGLib.cpp | 8 ++++++++ .../platform/network/soup/CertificateInfoSoup.cpp | 8 ++++++++ Source/WebKit/NetworkProcess/glib/DNSCache.cpp | 12 ++++++++++++ Source/WebKit/NetworkProcess/glib/DNSCache.h | 2 ++ .../NetworkProcess/glib/WebKitCachedResolver.cpp | 6 ++++++ .../glib/WebKitOverridingResolver.cpp | 4 ++++ Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp | 6 ++++++ Source/cmake/OptionsGTK.cmake | 13 ++++++++++++- Source/cmake/OptionsWPE.cmake | 13 ++++++++++++- 15 files changed, 94 insertions(+), 4 deletions(-) diff --git a/Source/WTF/wtf/URL.h b/Source/WTF/wtf/URL.h index 8a7864508a8e..f065677c68ad 100644 --- a/Source/WTF/wtf/URL.h +++ b/Source/WTF/wtf/URL.h @@ -27,7 +27,7 @@ #include -#if USE(GLIB) +#if USE(GLIB) && HAVE(GURI) #include #endif @@ -237,7 +237,7 @@ public: WTF_EXPORT_PRIVATE operator NSURL *() const; #endif -#if USE(GLIB) +#if USE(GLIB) && HAVE(GURI) WTF_EXPORT_PRIVATE URL(GUri*); WTF_EXPORT_PRIVATE GRefPtr createGUri() const; #endif diff --git a/Source/WTF/wtf/glib/GRefPtr.cpp b/Source/WTF/wtf/glib/GRefPtr.cpp index 4c15aa9866c0..6faa98b7eab2 100644 --- a/Source/WTF/wtf/glib/GRefPtr.cpp +++ b/Source/WTF/wtf/glib/GRefPtr.cpp @@ -207,6 +207,7 @@ template <> void derefGPtr(GDBusNodeInfo* ptr) g_dbus_node_info_unref(ptr); } +#if HAVE(GURI) template <> GUri* refGPtr(GUri* ptr) { if (ptr) @@ -219,6 +220,7 @@ template <> void derefGPtr(GUri* ptr) if (ptr) g_uri_unref(ptr); } +#endif template <> GArray* refGPtr(GArray* ptr) diff --git a/Source/WTF/wtf/glib/GRefPtr.h b/Source/WTF/wtf/glib/GRefPtr.h index 87a9ef9760bf..d6c71c14a981 100644 --- a/Source/WTF/wtf/glib/GRefPtr.h +++ b/Source/WTF/wtf/glib/GRefPtr.h @@ -264,8 +264,11 @@ template <> WTF_EXPORT_PRIVATE GArray* refGPtr(GArray*); template <> WTF_EXPORT_PRIVATE void derefGPtr(GArray*); template <> WTF_EXPORT_PRIVATE GResource* refGPtr(GResource*); template <> WTF_EXPORT_PRIVATE void derefGPtr(GResource*); + +#if HAVE(GURI) template <> WTF_EXPORT_PRIVATE GUri* refGPtr(GUri*); template <> WTF_EXPORT_PRIVATE void derefGPtr(GUri*); +#endif template inline T* refGPtr(T* ptr) { diff --git a/Source/WTF/wtf/glib/SocketConnection.cpp b/Source/WTF/wtf/glib/SocketConnection.cpp index d1185aeb2d47..80a622b83eba 100644 --- a/Source/WTF/wtf/glib/SocketConnection.cpp +++ b/Source/WTF/wtf/glib/SocketConnection.cpp @@ -145,7 +145,20 @@ bool SocketConnection::readMessage() if (!it->value.first.isNull()) { GUniquePtr variantType(g_variant_type_new(it->value.first.data())); size_t parametersSize = bodySize.value() - messageNameLength.value(); + // g_variant_new_from_data() requires the memory to be properly aligned for the type being loaded, + // but it's not possible to know the alignment because g_variant_type_info_query() is not public API. + // Since GLib 2.60 g_variant_new_from_data() already checks the alignment and reallocates the buffer + // in aligned memory only if needed. For older versions we can simply ensure the memory is 8 aligned. +#if GLIB_CHECK_VERSION(2, 60, 0) parameters = g_variant_new_from_data(variantType.get(), messageData, parametersSize, FALSE, nullptr, nullptr); +#else + auto* alignedMemory = fastAlignedMalloc(8, parametersSize); + memcpy(alignedMemory, messageData, parametersSize); + GRefPtr bytes = g_bytes_new_with_free_func(alignedMemory, parametersSize, [](gpointer data) { + fastAlignedFree(data); + }, alignedMemory); + parameters = g_variant_new_from_bytes(variantType.get(), bytes.get(), FALSE); +#endif if (messageIsByteSwapped(flags)) parameters = adoptGRef(g_variant_byteswap(parameters.get())); } diff --git a/Source/WTF/wtf/glib/URLGLib.cpp b/Source/WTF/wtf/glib/URLGLib.cpp index 589dc1b52f8f..f67fe780f333 100644 --- a/Source/WTF/wtf/glib/URLGLib.cpp +++ b/Source/WTF/wtf/glib/URLGLib.cpp @@ -35,6 +35,7 @@ namespace WTF { +#if HAVE(GURI) URL::URL(GUri* uri) { if (!uri) { @@ -56,6 +57,7 @@ GRefPtr URL::createGUri() const static_cast(G_URI_FLAGS_HAS_PASSWORD | G_URI_FLAGS_ENCODED_PATH | G_URI_FLAGS_ENCODED_QUERY | G_URI_FLAGS_ENCODED_FRAGMENT | G_URI_FLAGS_SCHEME_NORMALIZE | G_URI_FLAGS_PARSE_RELAXED), nullptr)); } +#endif bool URL::hostIsIPAddress(StringView host) { diff --git a/Source/WebCore/platform/LowPowerModeNotifier.h b/Source/WebCore/platform/LowPowerModeNotifier.h index c8f2051d77f6..e2ea0dae3292 100644 --- a/Source/WebCore/platform/LowPowerModeNotifier.h +++ b/Source/WebCore/platform/LowPowerModeNotifier.h @@ -61,8 +61,10 @@ private: RetainPtr m_observer; LowPowerModeChangeCallback m_callback; #elif USE(GLIB) +#if GLIB_CHECK_VERSION(2, 69, 1) LowPowerModeChangeCallback m_callback; GRefPtr m_powerProfileMonitor; +#endif bool m_lowPowerModeEnabled { false }; #endif }; diff --git a/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp b/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp index e083cc66934e..7c0f55d089e6 100644 --- a/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp +++ b/Source/WebCore/platform/glib/LowPowerModeNotifierGLib.cpp @@ -28,10 +28,13 @@ namespace WebCore { LowPowerModeNotifier::LowPowerModeNotifier(LowPowerModeChangeCallback&& callback) +#if GLIB_CHECK_VERSION(2, 69, 1) : m_callback(WTFMove(callback)) , m_powerProfileMonitor(adoptGRef(g_power_profile_monitor_dup_default())) , m_lowPowerModeEnabled(g_power_profile_monitor_get_power_saver_enabled(m_powerProfileMonitor.get())) +#endif { +#if GLIB_CHECK_VERSION(2, 69, 1) g_signal_connect_swapped(m_powerProfileMonitor.get(), "notify::power-saver-enabled", G_CALLBACK(+[] (LowPowerModeNotifier* self, GParamSpec*, GPowerProfileMonitor* monitor) { bool powerSaverEnabled = g_power_profile_monitor_get_power_saver_enabled(monitor); if (self->m_lowPowerModeEnabled != powerSaverEnabled) { @@ -39,11 +42,16 @@ LowPowerModeNotifier::LowPowerModeNotifier(LowPowerModeChangeCallback&& callback self->m_callback(self->m_lowPowerModeEnabled); } }), this); +#else + UNUSED_PARAM(callback); +#endif } LowPowerModeNotifier::~LowPowerModeNotifier() { +#if GLIB_CHECK_VERSION(2, 69, 1) g_signal_handlers_disconnect_by_data(m_powerProfileMonitor.get(), this); +#endif } bool LowPowerModeNotifier::isLowPowerModeEnabled() const diff --git a/Source/WebCore/platform/network/soup/CertificateInfoSoup.cpp b/Source/WebCore/platform/network/soup/CertificateInfoSoup.cpp index f32ecca7a300..e81a5433709d 100644 --- a/Source/WebCore/platform/network/soup/CertificateInfoSoup.cpp +++ b/Source/WebCore/platform/network/soup/CertificateInfoSoup.cpp @@ -73,9 +73,11 @@ CertificateInfo CertificateInfo::isolatedCopy() const certificatesDataList.append(certificateData.release()); } +#if GLIB_CHECK_VERSION(2, 69, 0) GUniqueOutPtr privateKey; GUniqueOutPtr privateKeyPKCS11Uri; g_object_get(m_certificate.get(), "private-key-pem", &privateKey.outPtr(), "private-key-pkcs11-uri", &privateKeyPKCS11Uri.outPtr(), nullptr); +#endif GType certificateType = g_tls_backend_get_certificate_type(g_tls_backend_get_default()); GRefPtr certificate; @@ -86,8 +88,10 @@ CertificateInfo CertificateInfo::isolatedCopy() const certificateType, nullptr, nullptr, "certificate-pem", certificateData.get(), "issuer", issuer, +#if GLIB_CHECK_VERSION(2, 69, 0) "private-key-pem", certificatesDataList.isEmpty() ? privateKey.get() : nullptr, "private-key-pkcs11-uri", certificatesDataList.isEmpty() ? privateKeyPKCS11Uri.get() : nullptr, +#endif nullptr))); RELEASE_ASSERT(certificate); issuer = certificate.get(); @@ -101,6 +105,7 @@ std::optional CertificateInfo::summary() const if (!m_certificate) return std::nullopt; +#if GLIB_CHECK_VERSION(2, 69, 0) CertificateSummary summaryInfo; GRefPtr validNotBefore; @@ -125,6 +130,9 @@ std::optional CertificateInfo::summary() const } return summaryInfo; +#else + return std::nullopt; +#endif } } // namespace WebCore diff --git a/Source/WebKit/NetworkProcess/glib/DNSCache.cpp b/Source/WebKit/NetworkProcess/glib/DNSCache.cpp index db92010baabf..b717b734e8e8 100644 --- a/Source/WebKit/NetworkProcess/glib/DNSCache.cpp +++ b/Source/WebKit/NetworkProcess/glib/DNSCache.cpp @@ -50,9 +50,17 @@ DNSCache::DNSCacheMap& DNSCache::mapForType(Type type) case Type::Default: return m_dnsMap; case Type::IPv4Only: +#if GLIB_CHECK_VERSION(2, 59, 0) return m_ipv4Map; +#else + return m_dnsMap; +#endif case Type::IPv6Only: +#if GLIB_CHECK_VERSION(2, 59, 0) return m_ipv6Map; +#else + return m_dnsMap; +#endif } RELEASE_ASSERT_NOT_REACHED(); @@ -118,16 +126,20 @@ void DNSCache::removeExpiredResponsesFired() { Locker locker { m_lock }; removeExpiredResponsesInMap(m_dnsMap); +#if GLIB_CHECK_VERSION(2, 59, 0) removeExpiredResponsesInMap(m_ipv4Map); removeExpiredResponsesInMap(m_ipv6Map); +#endif } void DNSCache::clear() { Locker locker { m_lock }; m_dnsMap.clear(); +#if GLIB_CHECK_VERSION(2, 59, 0) m_ipv4Map.clear(); m_ipv6Map.clear(); +#endif } } // namespace WebKit diff --git a/Source/WebKit/NetworkProcess/glib/DNSCache.h b/Source/WebKit/NetworkProcess/glib/DNSCache.h index 6aa530f44321..49aded549588 100644 --- a/Source/WebKit/NetworkProcess/glib/DNSCache.h +++ b/Source/WebKit/NetworkProcess/glib/DNSCache.h @@ -65,8 +65,10 @@ private: Lock m_lock; DNSCacheMap m_dnsMap WTF_GUARDED_BY_LOCK(m_lock); +#if GLIB_CHECK_VERSION(2, 59, 0) DNSCacheMap m_ipv4Map; DNSCacheMap m_ipv6Map; +#endif RunLoop::Timer m_expiredTimer; }; diff --git a/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp b/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp index 2752ff9cfc2c..7804e8b7a588 100644 --- a/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp +++ b/Source/WebKit/NetworkProcess/glib/WebKitCachedResolver.cpp @@ -67,7 +67,9 @@ static Vector> addressListGListToVector(GList* addressList struct LookupAsyncData { CString hostname; +#if GLIB_CHECK_VERSION(2, 59, 0) DNSCache::Type dnsCacheType { DNSCache::Type::Default }; +#endif }; WEBKIT_DEFINE_ASYNC_DATA_STRUCT(LookupAsyncData) @@ -117,6 +119,7 @@ static GList* webkitCachedResolverLookupByNameFinish(GResolver* resolver, GAsync return static_cast(g_task_propagate_pointer(G_TASK(result), error)); } +#if GLIB_CHECK_VERSION(2, 59, 0) static inline DNSCache::Type dnsCacheType(GResolverNameLookupFlags flags) { // A cache is kept for each type of response to avoid the overcomplication of combining or filtering results. @@ -177,6 +180,7 @@ static GList* webkitCachedResolverLookupByNameWithFlagsFinish(GResolver* resolve return static_cast(g_task_propagate_pointer(G_TASK(result), error)); } +#endif // GLIB_CHECK_VERSION(2, 59, 0) static char* webkitCachedResolverLookupByAddress(GResolver* resolver, GInetAddress* address, GCancellable* cancellable, GError** error) { @@ -219,9 +223,11 @@ static void webkit_cached_resolver_class_init(WebKitCachedResolverClass* klass) resolverClass->lookup_by_name = webkitCachedResolverLookupByName; resolverClass->lookup_by_name_async = webkitCachedResolverLookupByNameAsync; resolverClass->lookup_by_name_finish = webkitCachedResolverLookupByNameFinish; +#if GLIB_CHECK_VERSION(2, 59, 0) resolverClass->lookup_by_name_with_flags = webkitCachedResolverLookupByNameWithFlags; resolverClass->lookup_by_name_with_flags_async = webkitCachedResolverLookupByNameWithFlagsAsync; resolverClass->lookup_by_name_with_flags_finish = webkitCachedResolverLookupByNameWithFlagsFinish; +#endif resolverClass->lookup_by_address = webkitCachedResolverLookupByAddress; resolverClass->lookup_by_address_async = webkitCachedResolverLookupByAddressAsync; resolverClass->lookup_by_address_finish = webkitCachedResolverLookupByAddressFinish; diff --git a/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp b/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp index 150d74ed0296..f461e3c695fe 100644 --- a/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp +++ b/Source/WebKit/NetworkProcess/glib/WebKitOverridingResolver.cpp @@ -90,6 +90,7 @@ static GList* webkitOverridingResolverLookupByNameFinish(GResolver* resolver, GA return static_cast(g_task_propagate_pointer(G_TASK(result), error)); } +#if GLIB_CHECK_VERSION(2, 59, 0) static GList* createLoobackAddressList(WebKitOverridingResolver* resolver, GResolverNameLookupFlags flags) { GList* list = nullptr; @@ -129,6 +130,7 @@ static GList* webkitOverridingResolverLookupByNameWithFlagsFinish(GResolver* res return static_cast(g_task_propagate_pointer(G_TASK(result), error)); } +#endif // GLIB_CHECK_VERSION(2, 59, 0) static char* webkitOverridingResolverLookupByAddress(GResolver* resolver, GInetAddress* address, GCancellable* cancellable, GError** error) { @@ -166,9 +168,11 @@ static void webkit_overriding_resolver_class_init(WebKitOverridingResolverClass* resolverClass->lookup_by_name = webkitOverridingResolverLookupByName; resolverClass->lookup_by_name_async = webkitOverridingResolverLookupByNameAsync; resolverClass->lookup_by_name_finish = webkitOverridingResolverLookupByNameFinish; +#if GLIB_CHECK_VERSION(2, 59, 0) resolverClass->lookup_by_name_with_flags = webkitOverridingResolverLookupByNameWithFlags; resolverClass->lookup_by_name_with_flags_async = webkitOverridingResolverLookupByNameWithFlagsAsync; resolverClass->lookup_by_name_with_flags_finish = webkitOverridingResolverLookupByNameWithFlagsFinish; +#endif resolverClass->lookup_by_address = webkitOverridingResolverLookupByAddress; resolverClass->lookup_by_address_async = webkitOverridingResolverLookupByAddressAsync; resolverClass->lookup_by_address_finish = webkitOverridingResolverLookupByAddressFinish; diff --git a/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp b/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp index a73466be12f1..9ab0cfb6f440 100644 --- a/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp +++ b/Source/WebKit/Shared/glib/ArgumentCodersGLib.cpp @@ -121,11 +121,13 @@ void ArgumentCoder>::encode(Encoder& encoder, const GRe encoder << certificatesData; +#if GLIB_CHECK_VERSION(2, 69, 0) GRefPtr privateKey; GUniqueOutPtr privateKeyPKCS11Uri; g_object_get(certificate.get(), "private-key", &privateKey.outPtr(), "private-key-pkcs11-uri", &privateKeyPKCS11Uri.outPtr(), nullptr); encoder << privateKey; encoder << CString(privateKeyPKCS11Uri.get()); +#endif } std::optional> ArgumentCoder>::decode(Decoder& decoder) @@ -138,6 +140,7 @@ std::optional> ArgumentCoder>: if (!certificatesData->size()) return GRefPtr(); +#if GLIB_CHECK_VERSION(2, 69, 0) std::optional> privateKey; decoder >> privateKey; if (UNLIKELY(!privateKey)) @@ -147,6 +150,7 @@ std::optional> ArgumentCoder>: decoder >> privateKeyPKCS11Uri; if (UNLIKELY(!privateKeyPKCS11Uri)) return std::nullopt; +#endif GType certificateType = g_tls_backend_get_certificate_type(g_tls_backend_get_default()); GRefPtr certificate; @@ -156,8 +160,10 @@ std::optional> ArgumentCoder>: certificateType, nullptr, nullptr, "certificate", certificateData.get(), "issuer", issuer, +#if GLIB_CHECK_VERSION(2, 69, 0) "private-key", i == certificatesData->size() - 1 ? privateKey->get() : nullptr, "private-key-pkcs11-uri", i == certificatesData->size() - 1 ? privateKeyPKCS11Uri->data() : nullptr, +#endif nullptr))); issuer = certificate.get(); } diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake index 60b385861a7c..677ab4e49155 100644 --- a/Source/cmake/OptionsGTK.cmake +++ b/Source/cmake/OptionsGTK.cmake @@ -7,7 +7,6 @@ SET_PROJECT_VERSION(2 48 0) set(USER_AGENT_BRANDING "" CACHE STRING "Branding to add to user agent string") -find_package(GLIB 2.70.0 REQUIRED COMPONENTS gio gio-unix gobject gthread gmodule) find_package(Cairo 1.16.0 REQUIRED) find_package(LibGcrypt 1.7.0 REQUIRED) find_package(Libtasn1 REQUIRED) @@ -205,6 +204,13 @@ else () SET_AND_EXPOSE_TO_BUILD(ENABLE_2022_GLIB_API OFF) endif () +if (ENABLE_2022_GLIB_API) + set(GLIB_MINIMUM_VERSION 2.70.0) +else () + set(GLIB_MINIMUM_VERSION 2.56.4) +endif () +find_package(GLIB ${GLIB_MINIMUM_VERSION} REQUIRED COMPONENTS gio gio-unix gobject gthread gmodule) + EXPOSE_STRING_VARIABLE_TO_BUILD(WEBKITGTK_API_INFIX) EXPOSE_STRING_VARIABLE_TO_BUILD(WEBKITGTK_API_VERSION) @@ -277,6 +283,11 @@ if (ENABLED_COMPILER_SANITIZERS) set(ENABLE_DOCUMENTATION OFF) endif () +# GUri is available in GLib since version 2.66, but we only want to use it if version is >= 2.67.1. +if (PC_GLIB_VERSION VERSION_GREATER "2.67.1" OR PC_GLIB_VERSION STREQUAL "2.67.1") + SET_AND_EXPOSE_TO_BUILD(HAVE_GURI 1) +endif () + if (ENABLE_GAMEPAD) find_package(Manette 0.2.4) if (NOT Manette_FOUND) -- 2.49.0