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