From ec10920f1f76eb29e43c9a49c2554ec4c9a4f19c Mon Sep 17 00:00:00 2001 From: Apertis CI <devel@lists.apertis.org> Date: Fri, 19 Feb 2021 14:30:08 +0000 Subject: [PATCH 1/2] Import Upstream version 2.30.5 --- Documentation/jsc-glib-4.0/html/index.html | 2 +- .../html/jsc-glib-4.0-JSCVersion.html | 2 +- Documentation/webkit2gtk-4.0/html/index.html | 2 +- .../html/webkit2gtk-4.0-WebKitVersion.html | 2 +- .../webkitdomgtk-4.0/html/index.html | 2 +- NEWS | 11 ++++ Source/JavaScriptCore/PlatformGTK.cmake | 5 ++ .../JavaScriptCore/assembler/ARM64Assembler.h | 6 +-- .../assembler/AbstractMacroAssembler.h | 2 +- .../JavaScriptCore/assembler/LinkBuffer.cpp | 5 ++ .../jit/ExecutableAllocator.cpp | 38 +++++++------- .../JavaScriptCore/jit/ExecutableAllocator.h | 2 +- Source/WTF/wtf/PlatformEnable.h | 8 +-- Source/WTF/wtf/RunLoop.cpp | 11 ++++ Source/WTF/wtf/RunLoop.h | 2 + Source/WebCore/platform/UserAgentQuirks.cpp | 50 +++++++++++++++---- Source/WebCore/platform/UserAgentQuirks.h | 2 + .../audio/AudioSourceProviderClient.h | 4 +- .../AudioSourceProviderGStreamer.cpp | 29 +++++------ .../gstreamer/AudioSourceProviderGStreamer.h | 5 +- .../WebCore/platform/glib/UserAgentGLib.cpp | 6 +++ Source/WebKit/CMakeLists.txt | 4 ++ Source/WebKit/PlatformGTK.cmake | 6 +++ Source/WebKit/gtk/NEWS | 11 ++++ Source/cmake/FindGObjectIntrospection.cmake | 6 +++ Source/cmake/OptionsGTK.cmake | 6 +-- Tools/TestWebKitAPI/Tests/WTF/RunLoop.cpp | 17 +++++++ .../Tests/WebCore/UserAgentQuirks.cpp | 39 +++++++++++++-- 28 files changed, 217 insertions(+), 68 deletions(-) diff --git a/Documentation/jsc-glib-4.0/html/index.html b/Documentation/jsc-glib-4.0/html/index.html index b8fa65eca0..5233ba66a1 100644 --- a/Documentation/jsc-glib-4.0/html/index.html +++ b/Documentation/jsc-glib-4.0/html/index.html @@ -14,7 +14,7 @@ <div class="titlepage"> <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">JavaScriptCore GLib Reference Manual</p></th></tr></table></div> -<div><p class="releaseinfo">for JavaScriptCore 2.30.4</p></div> +<div><p class="releaseinfo">for JavaScriptCore 2.30.5</p></div> </div> <hr> </div> diff --git a/Documentation/jsc-glib-4.0/html/jsc-glib-4.0-JSCVersion.html b/Documentation/jsc-glib-4.0/html/jsc-glib-4.0-JSCVersion.html index 3391955f81..77fc85451f 100644 --- a/Documentation/jsc-glib-4.0/html/jsc-glib-4.0-JSCVersion.html +++ b/Documentation/jsc-glib-4.0/html/jsc-glib-4.0-JSCVersion.html @@ -175,7 +175,7 @@ have included when compiling your code.</p> <hr> <div class="refsect2"> <a name="JSC-MICRO-VERSION:CAPS"></a><h3>JSC_MICRO_VERSION</h3> -<pre class="programlisting">#define JSC_MICRO_VERSION (4) +<pre class="programlisting">#define JSC_MICRO_VERSION (5) </pre> </div> </div> diff --git a/Documentation/webkit2gtk-4.0/html/index.html b/Documentation/webkit2gtk-4.0/html/index.html index 531499882e..f490b3bb49 100644 --- a/Documentation/webkit2gtk-4.0/html/index.html +++ b/Documentation/webkit2gtk-4.0/html/index.html @@ -14,7 +14,7 @@ <div class="titlepage"> <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">WebKitGTK Reference Manual</p></th></tr></table></div> -<div><p class="releaseinfo">for WebKitGTK 2.30.4</p></div> +<div><p class="releaseinfo">for WebKitGTK 2.30.5</p></div> </div> <hr> </div> diff --git a/Documentation/webkit2gtk-4.0/html/webkit2gtk-4.0-WebKitVersion.html b/Documentation/webkit2gtk-4.0/html/webkit2gtk-4.0-WebKitVersion.html index 0f43b04c1e..079981593d 100644 --- a/Documentation/webkit2gtk-4.0/html/webkit2gtk-4.0-WebKitVersion.html +++ b/Documentation/webkit2gtk-4.0/html/webkit2gtk-4.0-WebKitVersion.html @@ -213,7 +213,7 @@ against at application run time.</p> <hr> <div class="refsect2"> <a name="WEBKIT-MICRO-VERSION:CAPS"></a><h3>WEBKIT_MICRO_VERSION</h3> -<pre class="programlisting">#define WEBKIT_MICRO_VERSION (4) +<pre class="programlisting">#define WEBKIT_MICRO_VERSION (5) </pre> <p>Like <a class="link" href="webkit2gtk-4.0-WebKitVersion.html#webkit-get-micro-version" title="webkit_get_micro_version ()"><code class="function">webkit_get_micro_version()</code></a>, but from the headers used at application compile time, rather than from the library linked diff --git a/Documentation/webkitdomgtk-4.0/html/index.html b/Documentation/webkitdomgtk-4.0/html/index.html index a0d2564a36..608f3f096f 100644 --- a/Documentation/webkitdomgtk-4.0/html/index.html +++ b/Documentation/webkitdomgtk-4.0/html/index.html @@ -14,7 +14,7 @@ <div class="titlepage"> <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">WebKitDOMGTK+ Reference Manual</p></th></tr></table></div> -<div><p class="releaseinfo">for WebKitDOMGTK+ 2.30.4</p></div> +<div><p class="releaseinfo">for WebKitDOMGTK+ 2.30.5</p></div> </div> <hr> </div> diff --git a/NEWS b/NEWS index 8a0834d79d..8a995fc944 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,14 @@ +================ +WebKitGTK 2.30.5 +================ + +What's new in WebKitGTK 2.30.5? + + - Bring back the WebKitPluginProcess intallation that was removed by mistake. + - Fix RunLoop objects leaked in worker threads. + - Fix aarch64 llint build with JIT disabled. + - Use Internet Explorer quirk for Google Docs. + ================ WebKitGTK 2.30.4 ================ diff --git a/Source/JavaScriptCore/PlatformGTK.cmake b/Source/JavaScriptCore/PlatformGTK.cmake index 0b2968d27c..680545c63e 100644 --- a/Source/JavaScriptCore/PlatformGTK.cmake +++ b/Source/JavaScriptCore/PlatformGTK.cmake @@ -68,6 +68,10 @@ if (ENABLE_INTROSPECTION) # Add required -L flags from ${CMAKE_SHARED_LINKER_FLAGS} for g-ir-scanner string(REGEX MATCHALL "-L[^ ]*" INTROSPECTION_ADDITIONAL_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + if (${INTROSPECTION_HAVE_SOURCES_TOP_DIRS}) + set(GIR_SOURCES_TOP_DIRS "--sources-top-dirs=${CMAKE_BINARY_DIR}") + endif () + add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/JavaScriptCore-${WEBKITGTK_API_VERSION}.gir DEPENDS JavaScriptCore @@ -88,6 +92,7 @@ if (ENABLE_INTROSPECTION) --pkg=gobject-2.0 --pkg-export=javascriptcoregtk-${WEBKITGTK_API_VERSION} --output=${CMAKE_BINARY_DIR}/JavaScriptCore-${WEBKITGTK_API_VERSION}.gir + ${GIR_SOURCES_TOP_DIRS} --c-include="jsc/jsc.h" -DJSC_COMPILATION -I${CMAKE_SOURCE_DIR}/Source diff --git a/Source/JavaScriptCore/assembler/ARM64Assembler.h b/Source/JavaScriptCore/assembler/ARM64Assembler.h index 63cbb182d6..31d09db81e 100644 --- a/Source/JavaScriptCore/assembler/ARM64Assembler.h +++ b/Source/JavaScriptCore/assembler/ARM64Assembler.h @@ -2571,7 +2571,7 @@ public: intptr_t offset = (reinterpret_cast<intptr_t>(to) - reinterpret_cast<intptr_t>(where)) >> 2; ASSERT(static_cast<int>(offset) == offset); -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) if (!isInt<26>(offset)) { to = ExecutableAllocator::singleton().getJumpIslandTo(where, to); offset = (bitwise_cast<intptr_t>(to) - bitwise_cast<intptr_t>(where)) >> 2; @@ -2769,7 +2769,7 @@ public: cacheFlush(reinterpret_cast<int*>(from) - 1, sizeof(int)); } -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) static void* prepareForAtomicRelinkJumpConcurrently(void* from, void* to) { intptr_t offset = (bitwise_cast<intptr_t>(to) - bitwise_cast<intptr_t>(from)) >> 2; @@ -3019,7 +3019,7 @@ protected: intptr_t offset = (bitwise_cast<intptr_t>(to) - bitwise_cast<intptr_t>(fromInstruction)) >> 2; ASSERT(static_cast<int>(offset) == offset); -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) if (!isInt<26>(offset)) { to = ExecutableAllocator::singleton().getJumpIslandTo(bitwise_cast<void*>(fromInstruction), to); offset = (bitwise_cast<intptr_t>(to) - bitwise_cast<intptr_t>(fromInstruction)) >> 2; diff --git a/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h b/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h index 35dbc95008..370dc1c538 100644 --- a/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h +++ b/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h @@ -916,7 +916,7 @@ public: template<PtrTag callTag, PtrTag destTag> static CodeLocationLabel<destTag> prepareForAtomicRepatchNearCallConcurrently(CodeLocationNearCall<callTag> nearCall, CodeLocationLabel<destTag> destination) { -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) switch (nearCall.callMode()) { case NearCallMode::Tail: return CodeLocationLabel<destTag>(tagCodePtr<destTag>(AssemblerType::prepareForAtomicRelinkJumpConcurrently(nearCall.dataLocation(), destination.dataLocation()))); diff --git a/Source/JavaScriptCore/assembler/LinkBuffer.cpp b/Source/JavaScriptCore/assembler/LinkBuffer.cpp index b6577a9e8c..7745793670 100644 --- a/Source/JavaScriptCore/assembler/LinkBuffer.cpp +++ b/Source/JavaScriptCore/assembler/LinkBuffer.cpp @@ -374,6 +374,7 @@ void LinkBuffer::copyCompactAndLinkCode(MacroAssembler& macroAssembler, JITCompi m_executableMemory->shrink(m_size); } +#if ENABLE(JIT) if (useFastJITPermissions()) { ASSERT(codeOutData == outData); if (UNLIKELY(Options::dumpJITMemoryPath())) @@ -382,6 +383,10 @@ void LinkBuffer::copyCompactAndLinkCode(MacroAssembler& macroAssembler, JITCompi ASSERT(codeOutData != outData); performJITMemcpy(codeOutData, outData, m_size); } +#else + ASSERT(codeOutData != outData); + performJITMemcpy(codeOutData, outData, m_size); +#endif jumpsToLink.clear(); diff --git a/Source/JavaScriptCore/jit/ExecutableAllocator.cpp b/Source/JavaScriptCore/jit/ExecutableAllocator.cpp index ff9a8afd05..c984a5c45d 100644 --- a/Source/JavaScriptCore/jit/ExecutableAllocator.cpp +++ b/Source/JavaScriptCore/jit/ExecutableAllocator.cpp @@ -81,7 +81,7 @@ static constexpr size_t fixedExecutableMemoryPoolSize = FIXED_EXECUTABLE_MEMORY_ #elif CPU(ARM) static constexpr size_t fixedExecutableMemoryPoolSize = 16 * MB; #elif CPU(ARM64) -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) static constexpr size_t fixedExecutableMemoryPoolSize = 1 * GB; // These sizes guarantee that any jump within an island can jump forwards or backwards // to the adjacent island in a single instruction. @@ -310,7 +310,7 @@ static ALWAYS_INLINE JITReservation initializeJITPageReservation() return reservation; reservation.size = fixedExecutableMemoryPoolSize; -#if !USE(JUMP_ISLANDS) +#if !ENABLE(JUMP_ISLANDS) // FIXME: Consider making jump islands work with Options::jitMemoryReservationSize // https://bugs.webkit.org/show_bug.cgi?id=209037 if (Options::jitMemoryReservationSize()) @@ -359,14 +359,14 @@ static ALWAYS_INLINE JITReservation initializeJITPageReservation() class FixedVMPoolExecutableAllocator final { WTF_MAKE_FAST_ALLOCATED; -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) class Islands; class RegionAllocator; #endif public: FixedVMPoolExecutableAllocator() -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) : m_allocators(constructFixedSizeArrayWithArguments<RegionAllocator, numberOfRegions>(*this)) #else : m_allocator(*this) @@ -375,7 +375,7 @@ public: JITReservation reservation = initializeJITPageReservation(); m_reservation = WTFMove(reservation.pageReservation); if (m_reservation) { -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) uintptr_t start = bitwise_cast<uintptr_t>(memoryStart()); uintptr_t reservationEnd = bitwise_cast<uintptr_t>(memoryEnd()); for (size_t i = 0; i < numberOfRegions; ++i) { @@ -415,7 +415,7 @@ public: RefPtr<ExecutableMemoryHandle> allocate(size_t sizeInBytes) { -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) auto locker = holdLock(getLock()); unsigned start = 0; @@ -434,7 +434,7 @@ public: return nullptr; #else return m_allocator.allocate(sizeInBytes); -#endif // USE(JUMP_ISLANDS) +#endif // ENABLE(JUMP_ISLANDS) } Lock& getLock() { return m_lock; } @@ -467,7 +467,7 @@ public: bool isInAllocatedMemory(const AbstractLocker& locker, void* address) { -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) if (RegionAllocator* allocator = findRegion(bitwise_cast<uintptr_t>(address))) return allocator->isInAllocatedMemory(locker, address); return false; @@ -498,7 +498,7 @@ public: return result; } -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) void handleWillBeReleased(const LockHolder& locker, MetaAllocatorHandle& handle) { if (m_islandsForJumpSourceLocation.isEmpty()) @@ -632,7 +632,7 @@ private: return result; } -#endif // USE(JUMP_ISLANDS) +#endif // ENABLE(JUMP_ISLANDS) private: class Allocator : public MetaAllocator { @@ -663,7 +663,7 @@ private: FixedVMPoolExecutableAllocator& m_fixedAllocator; }; -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) class RegionAllocator final : public Allocator { using Base = Allocator; public: @@ -768,12 +768,12 @@ private: void* m_end; FastBitVector islandBits; }; -#endif // USE(JUMP_ISLANDS) +#endif // ENABLE(JUMP_ISLANDS) template <typename Function> void forEachAllocator(Function function) { -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) for (RegionAllocator& allocator : m_allocators) { using FunctionResultType = decltype(function(allocator)); if constexpr (std::is_same<IterationStatus, FunctionResultType>::value) { @@ -786,10 +786,10 @@ private: } #else function(m_allocator); -#endif // USE(JUMP_ISLANDS) +#endif // ENABLE(JUMP_ISLANDS) } -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) class Islands : public RedBlackTree<Islands, void*>::Node { WTF_MAKE_FAST_ALLOCATED; public: @@ -797,16 +797,16 @@ private: CodeLocationLabel<ExecutableMemoryPtrTag> jumpSourceLocation; Vector<CodeLocationLabel<ExecutableMemoryPtrTag>> jumpIslands; }; -#endif // USE(JUMP_ISLANDS) +#endif // ENABLE(JUMP_ISLANDS) Lock m_lock; PageReservation m_reservation; -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) std::array<RegionAllocator, numberOfRegions> m_allocators; RedBlackTree<Islands, void*> m_islandsForJumpSourceLocation; #else Allocator m_allocator; -#endif // USE(JUMP_ISLANDS) +#endif // ENABLE(JUMP_ISLANDS) }; // Keep this pointer in a mutable global variable to help Leaks find it. @@ -938,7 +938,7 @@ void ExecutableAllocator::dumpProfile() } #endif -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) void* ExecutableAllocator::getJumpIslandTo(void* from, void* newDestination) { FixedVMPoolExecutableAllocator* allocator = g_jscConfig.fixedVMPoolExecutableAllocator; diff --git a/Source/JavaScriptCore/jit/ExecutableAllocator.h b/Source/JavaScriptCore/jit/ExecutableAllocator.h index 2a544320b9..ae15c20d5e 100644 --- a/Source/JavaScriptCore/jit/ExecutableAllocator.h +++ b/Source/JavaScriptCore/jit/ExecutableAllocator.h @@ -178,7 +178,7 @@ public: Lock& getLock() const; -#if USE(JUMP_ISLANDS) +#if ENABLE(JUMP_ISLANDS) JS_EXPORT_PRIVATE void* getJumpIslandTo(void* from, void* newDestination); JS_EXPORT_PRIVATE void* getJumpIslandToConcurrently(void* from, void* newDestination); #endif diff --git a/Source/WTF/wtf/PlatformEnable.h b/Source/WTF/wtf/PlatformEnable.h index 700f90adc6..2c4411664f 100644 --- a/Source/WTF/wtf/PlatformEnable.h +++ b/Source/WTF/wtf/PlatformEnable.h @@ -599,6 +599,10 @@ #endif #endif +#if !defined(ENABLE_JUMP_ISLANDS) && CPU(ARM64) && CPU(ADDRESS64) && ENABLE(JIT) +#define ENABLE_JUMP_ISLANDS 1 +#endif + /* FIXME: This should be turned into an #error invariant */ /* The FTL *does not* work on 32-bit platforms. Disable it even if someone asked us to enable it. */ #if USE(JSVALUE32_64) @@ -870,7 +874,3 @@ #if ENABLE(WEBGL2) && !ENABLE(WEBGL) #error "ENABLE(WEBGL2) requires ENABLE(WEBGL)" #endif - -#if CPU(ARM64) && CPU(ADDRESS64) -#define USE_JUMP_ISLANDS 1 -#endif diff --git a/Source/WTF/wtf/RunLoop.cpp b/Source/WTF/wtf/RunLoop.cpp index 32b21a3bad..c91cd2fa9f 100644 --- a/Source/WTF/wtf/RunLoop.cpp +++ b/Source/WTF/wtf/RunLoop.cpp @@ -46,6 +46,11 @@ public: { } + ~Holder() + { + m_runLoop->threadWillExit(); + } + RunLoop& runLoop() { return m_runLoop; } private: @@ -162,4 +167,10 @@ void RunLoop::suspendFunctionDispatchForCurrentCycle() wakeUp(); } +void RunLoop::threadWillExit() +{ + m_currentIteration.clear(); + m_nextIteration.clear(); +} + } // namespace WTF diff --git a/Source/WTF/wtf/RunLoop.h b/Source/WTF/wtf/RunLoop.h index fc2677bd4c..c8aad81595 100644 --- a/Source/WTF/wtf/RunLoop.h +++ b/Source/WTF/wtf/RunLoop.h @@ -96,6 +96,8 @@ public: enum class CycleResult { Continue, Stop }; WTF_EXPORT_PRIVATE CycleResult static cycle(RunLoopMode = DefaultRunLoopMode); + WTF_EXPORT_PRIVATE void threadWillExit(); + #if USE(GLIB_EVENT_LOOP) WTF_EXPORT_PRIVATE GMainContext* mainContext() const { return m_mainContext.get(); } enum class Event { WillDispatch, DidDispatch }; diff --git a/Source/WebCore/platform/UserAgentQuirks.cpp b/Source/WebCore/platform/UserAgentQuirks.cpp index 3904d4e2d2..b27b172ae4 100644 --- a/Source/WebCore/platform/UserAgentQuirks.cpp +++ b/Source/WebCore/platform/UserAgentQuirks.cpp @@ -38,11 +38,6 @@ namespace WebCore { static bool isGoogle(const URL& url) { String domain = url.host().toString(); - - // Google uses accounts.youtube.com for its login service. - if (domain == "accounts.youtube.com") - return true; - String baseDomain = topPrivatelyControlledDomain(domain); // Our Google UA is *very* complicated to get right. Read @@ -98,11 +93,6 @@ static bool urlRequiresFirefoxBrowser(const URL& url) { String domain = url.host().toString(); - // Google Drive shows an unsupported browser warning with WebKitGTK's - // standard user agent. - if (domain == "drive.google.com") - return true; - // Red Hat Bugzilla displays a warning page when performing searches with WebKitGTK's standard // user agent. if (domain == "bugzilla.redhat.com") @@ -111,6 +101,31 @@ static bool urlRequiresFirefoxBrowser(const URL& url) return false; } +static bool urlRequiresInternetExplorerBrowser(const URL& url) +{ + String domain = url.host().toString(); + + // This quirk actually has nothing to do with YouTube. It's needed to avoid + // unsupported browser warnings on Google Docs. Why do we need this weird + // quirk? We cannot use Chrome or Firefox quirks because Google then uses + // features that don't work in WebKit. And we can't use our macOS platform + // quirk because Google then expects command keys and doesn't support basic + // keyboard shortcuts. We could pretend to be Edge, but adding Chromium is + // likely to break in the same way as a Chrome quirk. So that leaves us + // with IE browser as the final reasonable option. This will break + // eventually, but hopefully not for a long time, because we are probably + // out of options when it does. + if (domain == "accounts.youtube.com" || domain == "docs.google.com") + return true; + + // Google Drive shows an unsupported browser warning with WebKitGTK's + // standard user agent. + if (domain == "drive.google.com") + return true; + + return false; +} + static bool urlRequiresMacintoshPlatform(const URL& url) { String domain = url.host().toString(); @@ -148,9 +163,14 @@ static bool urlRequiresMacintoshPlatform(const URL& url) return false; } +static bool urlRequiresWindowsPlatform(const URL& url) +{ + return urlRequiresInternetExplorerBrowser(url); +} + static bool urlRequiresLinuxDesktopPlatform(const URL& url) { - return isGoogle(url) && chassisType() != WTF::ChassisType::Mobile; + return isGoogle(url) && !urlRequiresInternetExplorerBrowser(url) && chassisType() != WTF::ChassisType::Mobile; } UserAgentQuirks UserAgentQuirks::quirksForURL(const URL& url) @@ -163,9 +183,13 @@ UserAgentQuirks UserAgentQuirks::quirksForURL(const URL& url) quirks.add(UserAgentQuirks::NeedsChromeBrowser); else if (urlRequiresFirefoxBrowser(url)) quirks.add(UserAgentQuirks::NeedsFirefoxBrowser); + else if (urlRequiresInternetExplorerBrowser(url)) + quirks.add(UserAgentQuirks::NeedsInternetExplorerBrowser); if (urlRequiresMacintoshPlatform(url)) quirks.add(UserAgentQuirks::NeedsMacintoshPlatform); + else if (urlRequiresWindowsPlatform(url)) + quirks.add(UserAgentQuirks::NeedsWindowsPlatform); else if (urlRequiresLinuxDesktopPlatform(url)) quirks.add(UserAgentQuirks::NeedsLinuxDesktopPlatform); @@ -180,8 +204,12 @@ String UserAgentQuirks::stringForQuirk(UserAgentQuirk quirk) return "Chrome/86.0.4208.2"_s; case NeedsFirefoxBrowser: return "; rv:80.0) Gecko/20100101 Firefox/80.0"_s; + case NeedsInternetExplorerBrowser: + return "; Trident/7.0; rv:11.0) like Gecko"_s; case NeedsMacintoshPlatform: return "Macintosh; Intel Mac OS X 10_15"_s; + case NeedsWindowsPlatform: + return "Windows NT 10.0"_s; case NeedsLinuxDesktopPlatform: return "X11; Linux x86_64"_s; case NumUserAgentQuirks: diff --git a/Source/WebCore/platform/UserAgentQuirks.h b/Source/WebCore/platform/UserAgentQuirks.h index 982f87f8c1..2ea3d86c9d 100644 --- a/Source/WebCore/platform/UserAgentQuirks.h +++ b/Source/WebCore/platform/UserAgentQuirks.h @@ -35,7 +35,9 @@ public: enum UserAgentQuirk { NeedsChromeBrowser, NeedsFirefoxBrowser, + NeedsInternetExplorerBrowser, NeedsMacintoshPlatform, + NeedsWindowsPlatform, NeedsLinuxDesktopPlatform, NumUserAgentQuirks diff --git a/Source/WebCore/platform/audio/AudioSourceProviderClient.h b/Source/WebCore/platform/audio/AudioSourceProviderClient.h index 047058f1cf..28a78b394a 100644 --- a/Source/WebCore/platform/audio/AudioSourceProviderClient.h +++ b/Source/WebCore/platform/audio/AudioSourceProviderClient.h @@ -25,9 +25,11 @@ #ifndef AudioSourceProviderClient_h #define AudioSourceProviderClient_h +#include <wtf/WeakPtr.h> + namespace WebCore { -class AudioSourceProviderClient { +class AudioSourceProviderClient : public CanMakeWeakPtr<AudioSourceProviderClient, WeakPtrFactoryInitialization::Eager> { public: virtual void setFormat(size_t numberOfChannels, float sampleRate) = 0; protected: diff --git a/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp b/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp index 54b39f45a5..d8e27c049f 100644 --- a/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp +++ b/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp @@ -127,15 +127,14 @@ AudioSourceProviderGStreamer::~AudioSourceProviderGStreamer() { m_notifier->invalidate(); - GRefPtr<GstElement> deinterleave = adoptGRef(gst_bin_get_by_name(GST_BIN(m_audioSinkBin.get()), "deinterleave")); + auto deinterleave = adoptGRef(gst_bin_get_by_name(GST_BIN_CAST(m_audioSinkBin.get()), "deinterleave")); if (deinterleave && m_client) { g_signal_handler_disconnect(deinterleave.get(), m_deinterleavePadAddedHandlerId); g_signal_handler_disconnect(deinterleave.get(), m_deinterleaveNoMorePadsHandlerId); g_signal_handler_disconnect(deinterleave.get(), m_deinterleavePadRemovedHandlerId); } - if (m_pipeline) - gst_element_set_state(m_pipeline.get(), GST_STATE_NULL); + setClient(nullptr); g_object_unref(m_frontLeftAdapter); g_object_unref(m_frontRightAdapter); @@ -229,22 +228,26 @@ GstFlowReturn AudioSourceProviderGStreamer::handleAudioBuffer(GstAppSink* sink) return GST_FLOW_OK; } -void AudioSourceProviderGStreamer::setClient(AudioSourceProviderClient* client) +void AudioSourceProviderGStreamer::setClient(AudioSourceProviderClient* newClient) { - if (m_client) + if (client() == newClient) return; - ASSERT(client); - m_client = client; + m_client = makeWeakPtr(newClient); if (m_pipeline) - gst_element_set_state(m_pipeline.get(), GST_STATE_PLAYING); + gst_element_set_state(m_pipeline.get(), m_client ? GST_STATE_PLAYING : GST_STATE_NULL); + + // FIXME: This early return should ideally be replaced by a removal of the m_audioSinkBin from + // its parent pipeline. https://bugs.webkit.org/show_bug.cgi?id=219245 + if (!m_client) + return; // The volume element is used to mute audio playback towards the // autoaudiosink. This is needed to avoid double playback of audio // from our audio sink and from the WebAudio AudioDestination node // supposedly configured already by application side. - GRefPtr<GstElement> volumeElement = adoptGRef(gst_bin_get_by_name(GST_BIN(m_audioSinkBin.get()), "volume")); + auto volumeElement = adoptGRef(gst_bin_get_by_name(GST_BIN_CAST(m_audioSinkBin.get()), "volume")); if (volumeElement) g_object_set(volumeElement.get(), "mute", TRUE, nullptr); @@ -375,11 +378,9 @@ void AudioSourceProviderGStreamer::handleRemovedDeinterleavePad(GstPad* pad) void AudioSourceProviderGStreamer::deinterleavePadsConfigured() { - m_notifier->notify(MainThreadNotification::DeinterleavePadsConfigured, [this] { - ASSERT(m_client); - ASSERT(m_deinterleaveSourcePads == gNumberOfChannels); - - m_client->setFormat(m_deinterleaveSourcePads, gSampleBitRate); + m_notifier->notify(MainThreadNotification::DeinterleavePadsConfigured, [numberOfChannels = m_deinterleaveSourcePads, sampleRate = gSampleBitRate, client = m_client] { + if (client) + client->setFormat(numberOfChannels, sampleRate); }); } diff --git a/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.h b/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.h index d6ba22a311..be39a3be61 100644 --- a/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.h +++ b/Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.h @@ -22,6 +22,7 @@ #if ENABLE(WEB_AUDIO) && ENABLE(VIDEO) && USE(GSTREAMER) #include "AudioSourceProvider.h" +#include "AudioSourceProviderClient.h" #include "GRefPtrGStreamer.h" #include "MainThreadNotifier.h" #include <gst/gst.h> @@ -61,7 +62,7 @@ public: void provideInput(AudioBus*, size_t framesToProcess) override; void setClient(AudioSourceProviderClient*) override; - const AudioSourceProviderClient* client() const { return m_client; } + const AudioSourceProviderClient* client() const { return m_client.get(); } void handleNewDeinterleavePad(GstPad*); void deinterleavePadsConfigured(); @@ -78,7 +79,7 @@ private: }; Ref<MainThreadNotifier<MainThreadNotification>> m_notifier; GRefPtr<GstElement> m_audioSinkBin; - AudioSourceProviderClient* m_client; + WeakPtr<AudioSourceProviderClient> m_client; int m_deinterleaveSourcePads; GstAdapter* m_frontLeftAdapter; GstAdapter* m_frontRightAdapter; diff --git a/Source/WebCore/platform/glib/UserAgentGLib.cpp b/Source/WebCore/platform/glib/UserAgentGLib.cpp index f27edf9784..dc8352c0ac 100644 --- a/Source/WebCore/platform/glib/UserAgentGLib.cpp +++ b/Source/WebCore/platform/glib/UserAgentGLib.cpp @@ -89,6 +89,8 @@ static String buildUserAgentString(const UserAgentQuirks& quirks) if (quirks.contains(UserAgentQuirks::NeedsMacintoshPlatform)) uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsMacintoshPlatform)); + else if (quirks.contains(UserAgentQuirks::NeedsWindowsPlatform)) + uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsWindowsPlatform)); else if (quirks.contains(UserAgentQuirks::NeedsLinuxDesktopPlatform)) uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsLinuxDesktopPlatform)); else { @@ -104,6 +106,10 @@ static String buildUserAgentString(const UserAgentQuirks& quirks) uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsFirefoxBrowser)); return uaString.toString(); } + if (quirks.contains(UserAgentQuirks::NeedsInternetExplorerBrowser)) { + uaString.append(UserAgentQuirks::stringForQuirk(UserAgentQuirks::NeedsInternetExplorerBrowser)); + return uaString.toString(); + } uaString.appendLiteral(") AppleWebKit/"); uaString.append(versionForUAString()); diff --git a/Source/WebKit/CMakeLists.txt b/Source/WebKit/CMakeLists.txt index dc9d6956ae..e266b4953b 100644 --- a/Source/WebKit/CMakeLists.txt +++ b/Source/WebKit/CMakeLists.txt @@ -577,4 +577,8 @@ else () LIBRARY DESTINATION "${LIB_INSTALL_DIR}" RUNTIME DESTINATION "${LIBEXEC_INSTALL_DIR}" ) + + if (ENABLE_PLUGIN_PROCESS) + install(TARGETS PluginProcess DESTINATION "${LIBEXEC_INSTALL_DIR}") + endif () endif () diff --git a/Source/WebKit/PlatformGTK.cmake b/Source/WebKit/PlatformGTK.cmake index 1e3035b0be..9650d390aa 100644 --- a/Source/WebKit/PlatformGTK.cmake +++ b/Source/WebKit/PlatformGTK.cmake @@ -646,6 +646,10 @@ if (ENABLE_INTROSPECTION) string(REGEX MATCHALL "-L[^ ]*" INTROSPECTION_ADDITIONAL_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + if (${INTROSPECTION_HAVE_SOURCES_TOP_DIRS}) + set(GIR_SOURCES_TOP_DIRS "--sources-top-dirs=${CMAKE_BINARY_DIR}") + endif () + add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.gir DEPENDS WebKit @@ -673,6 +677,7 @@ if (ENABLE_INTROSPECTION) --pkg=libsoup-2.4 --pkg-export=webkit2gtk-${WEBKITGTK_API_VERSION} --output=${CMAKE_BINARY_DIR}/WebKit2-${WEBKITGTK_API_VERSION}.gir + ${GIR_SOURCES_TOP_DIRS} --c-include="webkit2/webkit2.h" -DBUILDING_WEBKIT -DWEBKIT2_COMPILATION @@ -720,6 +725,7 @@ if (ENABLE_INTROSPECTION) --pkg=libsoup-2.4 --pkg-export=webkit2gtk-web-extension-${WEBKITGTK_API_VERSION} --output=${CMAKE_BINARY_DIR}/WebKit2WebExtension-${WEBKITGTK_API_VERSION}.gir + ${GIR_SOURCES_TOP_DIRS} --c-include="webkit2/webkit-web-extension.h" -DBUILDING_WEBKIT -DWEBKIT2_COMPILATION diff --git a/Source/WebKit/gtk/NEWS b/Source/WebKit/gtk/NEWS index 8a0834d79d..8a995fc944 100644 --- a/Source/WebKit/gtk/NEWS +++ b/Source/WebKit/gtk/NEWS @@ -1,3 +1,14 @@ +================ +WebKitGTK 2.30.5 +================ + +What's new in WebKitGTK 2.30.5? + + - Bring back the WebKitPluginProcess intallation that was removed by mistake. + - Fix RunLoop objects leaked in worker threads. + - Fix aarch64 llint build with JIT disabled. + - Use Internet Explorer quirk for Google Docs. + ================ WebKitGTK 2.30.4 ================ diff --git a/Source/cmake/FindGObjectIntrospection.cmake b/Source/cmake/FindGObjectIntrospection.cmake index 44ea621c15..bbe4742465 100644 --- a/Source/cmake/FindGObjectIntrospection.cmake +++ b/Source/cmake/FindGObjectIntrospection.cmake @@ -44,6 +44,10 @@ if (PKG_CONFIG_FOUND) _gir_get_pkgconfig_var(INTROSPECTION_GENERATE "g_ir_generate" "") _gir_get_pkgconfig_var(INTROSPECTION_GIRDIR "girdir" "") _gir_get_pkgconfig_var(INTROSPECTION_TYPELIBDIR "typelibdir" "") + set(INTROSPECTION_VERSION "${_pc_gir_VERSION}") + if (${INTROSPECTION_VERSION} VERSION_GREATER_EQUAL "1.59.1") + set(INTROSPECTION_HAVE_SOURCES_TOP_DIRS YES) + endif () set(INTROSPECTION_CFLAGS "${_pc_gir_CFLAGS}") set(INTROSPECTION_LIBS "${_pc_gir_LIBS}") endif () @@ -57,4 +61,6 @@ mark_as_advanced( INTROSPECTION_TYPELIBDIR INTROSPECTION_CFLAGS INTROSPECTION_LIBS + INTROSPECTION_VERSION + INTROSPECTION_HAVE_SOURCES_TOP_DIRS ) diff --git a/Source/cmake/OptionsGTK.cmake b/Source/cmake/OptionsGTK.cmake index dc40653cb4..4853ee9e72 100644 --- a/Source/cmake/OptionsGTK.cmake +++ b/Source/cmake/OptionsGTK.cmake @@ -4,7 +4,7 @@ include(VersioningUtils) WEBKIT_OPTION_BEGIN() WEBKIT_OPTION_DEFINE(USE_GTK4 "Whether to enable usage of GTK4 instead of GTK3." PUBLIC OFF) -SET_PROJECT_VERSION(2 30 4) +SET_PROJECT_VERSION(2 30 5) if (USE_GTK4) set(WEBKITGTK_API_VERSION 5.0) @@ -13,10 +13,10 @@ if (USE_GTK4) else () set(WEBKITGTK_API_VERSION 4.0) set(GTK_MINIMUM_VERSION 3.22.0) - CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(WEBKIT 86 8 49) + CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(WEBKIT 86 9 49) endif () -CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(JAVASCRIPTCORE 35 12 17) +CALCULATE_LIBRARY_VERSIONS_FROM_LIBTOOL_TRIPLE(JAVASCRIPTCORE 35 13 17) # These are shared variables, but we special case their definition so that we can use the # CMAKE_INSTALL_* variables that are populated by the GNUInstallDirs macro. diff --git a/Tools/TestWebKitAPI/Tests/WTF/RunLoop.cpp b/Tools/TestWebKitAPI/Tests/WTF/RunLoop.cpp index 541610a681..d388bf8057 100644 --- a/Tools/TestWebKitAPI/Tests/WTF/RunLoop.cpp +++ b/Tools/TestWebKitAPI/Tests/WTF/RunLoop.cpp @@ -215,4 +215,21 @@ TEST(WTF_RunLoop, ManyTimes) })->waitForCompletion(); } +TEST(WTF_RunLoop, ThreadTerminationSelfReferenceCleanup) +{ + RefPtr<RunLoop> runLoop; + + Thread::create("RunLoopThreadTerminationSelfReferenceCleanup", [&] { + runLoop = makeRefPtr(RunLoop::current()); + + // This stores a RunLoop reference in the dispatch queue that will not be released + // via the usual dispatch, but should still be released upon thread termination. + // After that, the observing RefPtr should be the only one holding a reference + // to the RunLoop object. + runLoop->dispatch([ref = runLoop.copyRef()] { }); + })->waitForCompletion(); + + EXPECT_TRUE(runLoop->hasOneRef()); +} + } // namespace TestWebKitAPI diff --git a/Tools/TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp b/Tools/TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp index 15c031fc0d..1271270199 100644 --- a/Tools/TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp +++ b/Tools/TestWebKitAPI/Tests/WebCore/UserAgentQuirks.cpp @@ -41,6 +41,7 @@ static void assertUserAgentForURLHasChromeBrowserQuirk(const char* url) EXPECT_FALSE(uaString.contains("Chromium")); EXPECT_FALSE(uaString.contains("Firefox")); EXPECT_FALSE(uaString.contains("Version")); + EXPECT_FALSE(uaString.contains("Trident")); } static void assertUserAgentForURLHasFirefoxBrowserQuirk(const char* url) @@ -52,6 +53,19 @@ static void assertUserAgentForURLHasFirefoxBrowserQuirk(const char* url) EXPECT_FALSE(uaString.contains("Chromium")); EXPECT_TRUE(uaString.contains("Firefox")); EXPECT_FALSE(uaString.contains("Version")); + EXPECT_FALSE(uaString.contains("Trident")); +} + +static void assertUserAgentForURLHasInternetExplorerBrowserQuirk(const char* url) +{ + String uaString = standardUserAgentForURL(URL({ }, url)); + + EXPECT_FALSE(uaString.contains("Chrome")); + EXPECT_FALSE(uaString.contains("Safari")); + EXPECT_FALSE(uaString.contains("Chromium")); + EXPECT_FALSE(uaString.contains("Firefox")); + EXPECT_FALSE(uaString.contains("Version")); + EXPECT_TRUE(uaString.contains("Trident")); } static void assertUserAgentForURLHasLinuxPlatformQuirk(const char* url) @@ -66,6 +80,18 @@ static void assertUserAgentForURLHasLinuxPlatformQuirk(const char* url) EXPECT_FALSE(uaString.contains("FreeBSD")); } +static void assertUserAgentForURLHasWindowsPlatformQuirk(const char* url) +{ + String uaString = standardUserAgentForURL(URL({ }, url)); + + EXPECT_FALSE(uaString.contains("Macintosh")); + EXPECT_FALSE(uaString.contains("Mac OS X")); + EXPECT_FALSE(uaString.contains("Linux")); + EXPECT_TRUE(uaString.contains("Windows")); + EXPECT_FALSE(uaString.contains("Chrome")); + EXPECT_FALSE(uaString.contains("FreeBSD")); +} + static void assertUserAgentForURLHasMacPlatformQuirk(const char* url) { String uaString = standardUserAgentForURL(URL({ }, url)); @@ -80,7 +106,7 @@ static void assertUserAgentForURLHasMacPlatformQuirk(const char* url) TEST(UserAgentTest, Quirks) { - // A site with not quirks should return a null String. + // A site with no quirks should return a null String. String uaString = standardUserAgentForURL(URL({ }, "http://www.webkit.org/")); EXPECT_TRUE(uaString.isNull()); @@ -95,17 +121,22 @@ TEST(UserAgentTest, Quirks) assertUserAgentForURLHasChromeBrowserQuirk("http://auth.mayohr.com/"); assertUserAgentForURLHasChromeBrowserQuirk("http://bankofamerica.com/"); - assertUserAgentForURLHasFirefoxBrowserQuirk("http://drive.google.com/"); assertUserAgentForURLHasFirefoxBrowserQuirk("http://bugzilla.redhat.com/"); + assertUserAgentForURLHasInternetExplorerBrowserQuirk("http://accounts.youtube.com/"); + assertUserAgentForURLHasInternetExplorerBrowserQuirk("http://docs.google.com/"); + assertUserAgentForURLHasInternetExplorerBrowserQuirk("http://drive.google.com/"); + + assertUserAgentForURLHasWindowsPlatformQuirk("http://accounts.youtube.com/"); + assertUserAgentForURLHasWindowsPlatformQuirk("http://docs.google.com/"); + assertUserAgentForURLHasWindowsPlatformQuirk("http://drive.google.com/"); + assertUserAgentForURLHasLinuxPlatformQuirk("http://www.google.com/"); assertUserAgentForURLHasLinuxPlatformQuirk("http://www.google.es/"); assertUserAgentForURLHasLinuxPlatformQuirk("http://calendar.google.com/"); assertUserAgentForURLHasLinuxPlatformQuirk("http://plus.google.com/"); assertUserAgentForURLHasLinuxPlatformQuirk("http://drive.google.com/"); assertUserAgentForURLHasLinuxPlatformQuirk("http://fonts.googleapis.com/"); - assertUserAgentForURLHasLinuxPlatformQuirk("http://accounts.youtube.com/"); - assertUserAgentForURLHasLinuxPlatformQuirk("http://docs.google.com/"); assertUserAgentForURLHasMacPlatformQuirk("http://www.yahoo.com/"); assertUserAgentForURLHasMacPlatformQuirk("http://finance.yahoo.com/"); -- GitLab From bd55fbd11296e91bb0b13b0b9354a7f29e026f1a Mon Sep 17 00:00:00 2001 From: Ritesh Raj Sarraf <ritesh.sarraf@collabora.com> Date: Fri, 19 Feb 2021 20:09:02 +0530 Subject: [PATCH 2/2] Release webkit2gtk version 2.30.5-1~deb10u1co1 Signed-off-by: Ritesh Raj Sarraf <ritesh.sarraf@collabora.com> --- debian/changelog | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/debian/changelog b/debian/changelog index 7c18397b38..2639dee554 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,10 @@ -webkit2gtk (2.30.5-1~deb10u1co1) UNRELEASED; urgency=medium +webkit2gtk (2.30.5-1~deb10u1co1) apertis; urgency=medium - * PLEASE SUMMARIZE remaining Apertis changes + [ Ritesh Raj Sarraf ] + * Merge from buster-security. Remaining Apertis specific changes: + + Explicitly request GLES2. + + Disable spellchecking (T2412). + + Disable the (gtk2) plugin process. -- Apertis CI <devel@lists.apertis.org> Fri, 19 Feb 2021 14:31:47 +0000 -- GitLab