Title: [282889] trunk/Source/WebKit
Revision
282889
Author
achristen...@apple.com
Date
2021-09-22 16:18:25 -0700 (Wed, 22 Sep 2021)

Log Message

Unreviewed, (manually) reverting r282856.
https://bugs.webkit.org/show_bug.cgi?id=230634

Caused ProcessSwap API test failures on iOS.

Reverted changest:

"Remove GenericCallback"
https://bugs.webkit.org/show_bug.cgi?id=229366
https://trac.webkit.org/changeset/282856/webkit

Patch by Ryan Haddad <ryanhad...@apple.com> on 2021-09-22

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (282888 => 282889)


--- trunk/Source/WebKit/ChangeLog	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/ChangeLog	2021-09-22 23:18:25 UTC (rev 282889)
@@ -1,3 +1,16 @@
+2021-09-22  Ryan Haddad  <ryanhad...@apple.com>
+
+        Unreviewed, (manually) reverting r282856.
+        https://bugs.webkit.org/show_bug.cgi?id=230634
+
+        Caused ProcessSwap API test failures on iOS.
+
+        Reverted changest:
+
+        "Remove GenericCallback"
+        https://bugs.webkit.org/show_bug.cgi?id=229366
+        https://trac.webkit.org/changeset/282856/webkit
+
 2021-09-22  Alex Christensen  <achristen...@webkit.org>
 
         PCM should include the bundle ID of the app from which it originated

Modified: trunk/Source/WebKit/Shared/CallbackID.h (282888 => 282889)


--- trunk/Source/WebKit/Shared/CallbackID.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/Shared/CallbackID.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -98,6 +98,7 @@
         ASSERT(newID != HashTraits<uint64_t>::emptyValue());
     }
 
+    friend class CallbackMap;
     template <typename CallbackType> friend class SpecificCallbackMap;
     friend struct WTF::CallbackIDHash;
     friend HashTraits<WebKit::CallbackID>;

Modified: trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h (282888 => 282889)


--- trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/Shared/RemoteLayerTree/RemoteLayerTreeTransaction.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -25,10 +25,10 @@
 
 #pragma once
 
-#include "CallbackID.h"
 #include "DrawingAreaInfo.h"
 #include "DynamicViewportSizeUpdate.h"
 #include "EditorState.h"
+#include "GenericCallback.h"
 #include "PlatformCAAnimationRemote.h"
 #include "RemoteLayerBackingStore.h"
 #include "TransactionID.h"

Modified: trunk/Source/WebKit/UIProcess/API/APIAttachment.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/APIAttachment.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/APIAttachment.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -28,6 +28,7 @@
 #if ENABLE(ATTACHMENT_ELEMENT)
 
 #include "APIObject.h"
+#include "GenericCallback.h"
 #include "WKBase.h"
 #include <wtf/RefPtr.h>
 #include <wtf/WeakPtr.h>

Modified: trunk/Source/WebKit/UIProcess/API/APIIconLoadingClient.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/APIIconLoadingClient.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/APIIconLoadingClient.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -25,6 +25,7 @@
 
 #pragma once
 
+#include "GenericCallback.h"
 #include <WebCore/LinkIcon.h>
 #include <wtf/CompletionHandler.h>
 #include <wtf/Function.h>
@@ -31,14 +32,12 @@
 
 namespace API {
 
-class Data;
-
 class IconLoadingClient {
     WTF_MAKE_FAST_ALLOCATED;
 public:
     virtual ~IconLoadingClient() { }
 
-    virtual void getLoadDecisionForIcon(const WebCore::LinkIcon&, CompletionHandler<void(CompletionHandler<void(Data*)>&&)>&& completionHandler)
+    virtual void getLoadDecisionForIcon(const WebCore::LinkIcon&, CompletionHandler<void(CompletionHandler<void(API::Data*)>&&)>&& completionHandler)
     {
         completionHandler(nullptr);
     }

Modified: trunk/Source/WebKit/UIProcess/API/APIInspectorExtension.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/APIInspectorExtension.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/APIInspectorExtension.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -28,7 +28,6 @@
 
 #if ENABLE(INSPECTOR_EXTENSIONS)
 
-#include "APISerializedScriptValue.h"
 #include "InspectorExtensionTypes.h"
 #include "WebInspectorUIExtensionControllerProxy.h"
 #include <WebCore/ExceptionDetails.h>

Modified: trunk/Source/WebKit/UIProcess/API/APIUIClient.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/APIUIClient.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/APIUIClient.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -26,7 +26,6 @@
 #pragma once
 
 #include "APIInspectorConfiguration.h"
-#include "APISecurityOrigin.h"
 #include "WKPage.h"
 #include "WebEvent.h"
 #include "WebHitTestResultData.h"

Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -45,7 +45,6 @@
 #include "APIOpenPanelParameters.h"
 #include "APIPageConfiguration.h"
 #include "APIPolicyClient.h"
-#include "APISerializedScriptValue.h"
 #include "APISessionState.h"
 #include "APIUIClient.h"
 #include "APIWebAuthenticationPanel.h"
@@ -3006,8 +3005,8 @@
 void WKPageCallAfterNextPresentationUpdate(WKPageRef pageRef, void* context, WKPagePostPresentationUpdateFunction callback)
 {
     CRASH_IF_SUSPENDED;
-    toImpl(pageRef)->callAfterNextPresentationUpdate([context, callback]() {
-        callback(nullptr, context);
+    toImpl(pageRef)->callAfterNextPresentationUpdate([context, callback](WebKit::CallbackBase::Error error) {
+        callback(error != WebKit::CallbackBase::Error::None ? toAPI(API::Error::create().ptr()) : 0, context);
     });
 }
 

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/NSAttributedString.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -42,7 +42,6 @@
 
 #if PLATFORM(IOS_FAMILY)
 #import <UIKitSPI.h>
-#import <WebCore/WAKAppKitStubs.h>
 #endif
 
 NSString * const NSReadAccessURLDocumentOption = @"ReadAccessURL";

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextController.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextController.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextController.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -32,7 +32,6 @@
 #import "PageLoadStateObserver.h"
 #import "RemoteObjectRegistry.h"
 #import "RemoteObjectRegistryMessages.h"
-#import "WKAPICast.h"
 #import "WKBackForwardListInternal.h"
 #import "WKBackForwardListItemInternal.h"
 #import "WKBrowsingContextGroupInternal.h"

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKErrorInternal.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKErrorInternal.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKErrorInternal.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -26,6 +26,7 @@
 #import "WKErrorPrivate.h"
 
 #import <wtf/RetainPtr.h>
+#import "GenericCallback.h"
 
 RetainPtr<NSError> createNSError(WKErrorCode, NSError* underlyingError = nil);
 NSString *localizedDescriptionForErrorCode(WKErrorCode);

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -1168,9 +1168,7 @@
 - (void)takeSnapshotWithConfiguration:(WKSnapshotConfiguration *)snapshotConfiguration completionHandler:(void(^)(CocoaImage *, NSError *))completionHandler
 {
     THROW_IF_SUSPENDED;
-#if USE(APPKIT)
     constexpr bool snapshotFailedTraceValue = false;
-#endif
     tracePoint(TakeSnapshotStart);
 
     CGRect rectInViewCoordinates = snapshotConfiguration && !CGRectIsNull(snapshotConfiguration.rect) ? snapshotConfiguration.rect : self.bounds;
@@ -1245,7 +1243,13 @@
         return;
     }
 
-    _page->callAfterNextPresentationUpdate([callSnapshotRect = WTFMove(callSnapshotRect), handler]() mutable {
+    _page->callAfterNextPresentationUpdate([callSnapshotRect = WTFMove(callSnapshotRect), handler](WebKit::CallbackBase::Error error) mutable {
+        if (error != WebKit::CallbackBase::Error::None) {
+            tracePoint(TakeSnapshotEnd, snapshotFailedTraceValue);
+            handler(nil, createNSError(WKErrorUnknown).get());
+            return;
+        }
+
         // Create an implicit transaction to ensure a commit will happen next.
         [CATransaction activate];
 
@@ -1515,7 +1519,7 @@
     auto updateBlockCopy = makeBlockPtr(updateBlock);
 
     RetainPtr<WKWebView> strongSelf = self;
-    _page->callAfterNextPresentationUpdate([updateBlockCopy, withoutWaitingForAnimatedResize, strongSelf] {
+    _page->callAfterNextPresentationUpdate([updateBlockCopy, withoutWaitingForAnimatedResize, strongSelf](WebKit::CallbackBase::Error error) {
         if (!updateBlockCopy)
             return;
 

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -28,7 +28,6 @@
 
 #if ENABLE(INSPECTOR_EXTENSIONS)
 
-#import "APISerializedScriptValue.h"
 #import "InspectorExtensionDelegate.h"
 #import "InspectorExtensionTypes.h"
 #import "WKError.h"

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitContextMenuClient.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitContextMenuClient.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitContextMenuClient.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -21,7 +21,6 @@
 #include "WebKitContextMenuClient.h"
 
 #include "APIContextMenuClient.h"
-#include "APIString.h"
 #include "WebContextMenuItem.h"
 #include "WebKitWebViewPrivate.h"
 

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitFindController.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitFindController.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitFindController.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -21,7 +21,6 @@
 #include "WebKitFindController.h"
 
 #include "APIFindClient.h"
-#include "WebFindOptions.h"
 #include "WebKitEnumTypes.h"
 #include "WebKitWebViewPrivate.h"
 #include <glib/gi18n-lib.h>

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitInjectedBundleClient.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitInjectedBundleClient.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitInjectedBundleClient.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -20,12 +20,7 @@
 #include "config.h"
 #include "WebKitInjectedBundleClient.h"
 
-#include "APIError.h"
 #include "APIInjectedBundleClient.h"
-#include "APINumber.h"
-#include "APIString.h"
-#include "APIURLRequest.h"
-#include "APIURLResponse.h"
 #include "WebImage.h"
 #include "WebKitPrivate.h"
 #include "WebKitURIRequestPrivate.h"

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitNotificationProvider.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitNotificationProvider.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitNotificationProvider.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -29,7 +29,6 @@
 
 #include "APIArray.h"
 #include "APINotificationProvider.h"
-#include "APINumber.h"
 #include "WebKitNotificationPrivate.h"
 #include "WebKitWebContextPrivate.h"
 #include "WebKitWebViewPrivate.h"

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitWebResource.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitWebResource.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitWebResource.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -21,7 +21,6 @@
 #include "WebKitWebResource.h"
 
 #include "APIData.h"
-#include "APIURL.h"
 #include "WebFrameProxy.h"
 #include "WebKitURIRequest.h"
 #include "WebKitWebResourcePrivate.h"

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -25,7 +25,6 @@
 #include "APIContentWorld.h"
 #include "APIData.h"
 #include "APINavigation.h"
-#include "APINumber.h"
 #include "APISerializedScriptValue.h"
 #include "DataReference.h"
 #include "ImageOptions.h"

Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitPrintOperation.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitPrintOperation.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitPrintOperation.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -20,7 +20,6 @@
 #include "config.h"
 #include "WebKitPrintOperation.h"
 
-#include "APIError.h"
 #include "WebKitPrintCustomWidgetPrivate.h"
 #include "WebKitPrintOperationPrivate.h"
 #include "WebKitPrivate.h"

Modified: trunk/Source/WebKit/UIProcess/API/mac/WKView.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/API/mac/WKView.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/API/mac/WKView.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -1677,7 +1677,7 @@
 - (void)_doAfterNextPresentationUpdate:(void (^)(void))updateBlock
 {
     auto updateBlockCopy = makeBlockPtr(updateBlock);
-    _data->_impl->page().callAfterNextPresentationUpdate([updateBlockCopy] {
+    _data->_impl->page().callAfterNextPresentationUpdate([updateBlockCopy](WebKit::CallbackBase::Error error) {
         if (updateBlockCopy)
             updateBlockCopy();
     });

Modified: trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -31,7 +31,6 @@
 #include "APIAutomationSessionClient.h"
 #include "APINavigation.h"
 #include "APIOpenPanelParameters.h"
-#include "APIString.h"
 #include "AutomationProtocolObjects.h"
 #include "CoordinateSystem.h"
 #include "WebAutomationSessionMacros.h"
@@ -2206,7 +2205,9 @@
 
 #if PLATFORM(GTK)
     Function<void(WebPageProxy&, std::optional<WebCore::IntRect>&&, Ref<TakeScreenshotCallback>&&)> takeViewSnapsot = [](WebPageProxy& page, std::optional<WebCore::IntRect>&& rect, Ref<TakeScreenshotCallback>&& callback) {
-        page.callAfterNextPresentationUpdate([page = Ref { page }, rect = WTFMove(rect), callback = WTFMove(callback)]() mutable {
+        page.callAfterNextPresentationUpdate([page = Ref { page }, rect = WTFMove(rect), callback = WTFMove(callback)](CallbackBase::Error error) mutable {
+            if (error != CallbackBase::Error::None)
+                ASYNC_FAIL_WITH_PREDEFINED_ERROR(InternalError);
 
             auto snapshot = page->takeViewSnapshot(WTFMove(rect));
             if (!snapshot)

Modified: trunk/Source/WebKit/UIProcess/Automation/mac/WebAutomationSessionMac.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/Automation/mac/WebAutomationSessionMac.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/Automation/mac/WebAutomationSessionMac.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -31,7 +31,6 @@
 #import "Logging.h"
 #import "WebAutomationSessionMacros.h"
 #import "WebInspectorUIProxy.h"
-#import "WebMouseEvent.h"
 #import "WebPageProxy.h"
 #import "_WKAutomationSession.h"
 #import <Carbon/Carbon.h>

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -33,7 +33,6 @@
 #import "ObjCObjectGraph.h"
 #import "SandboxUtilities.h"
 #import "SharedBufferDataReference.h"
-#import "WKAPICast.h"
 #import "WKBrowsingContextControllerInternal.h"
 #import "WKBrowsingContextHandleInternal.h"
 #import "WKTypeRefWrapper.h"

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -36,6 +36,7 @@
 #import "CoreTextHelpers.h"
 #import "FontInfo.h"
 #import "FullscreenClient.h"
+#import "GenericCallback.h"
 #import "InsertTextOptions.h"
 #import "Logging.h"
 #import "NativeWebGestureEvent.h"

Modified: trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -417,7 +417,7 @@
     return false;
 }
 
-void DrawingAreaProxyCoordinatedGraphics::DrawingMonitor::start(Function<void()>&& callback)
+void DrawingAreaProxyCoordinatedGraphics::DrawingMonitor::start(WTF::Function<void(CallbackBase::Error)>&& callback)
 {
     m_startTime = MonotonicTime::now();
     m_callback = WTFMove(callback);
@@ -441,8 +441,10 @@
     g_signal_handlers_disconnect_by_func(m_webPage.viewWidget(), reinterpret_cast<gpointer>(webViewDrawCallback), this);
 #endif
     m_startTime = MonotonicTime();
-    if (auto callback = std::exchange(m_callback, nullptr))
-        callback();
+    if (m_callback) {
+        m_callback(CallbackBase::Error::None);
+        m_callback = nullptr;
+    }
 }
 
 void DrawingAreaProxyCoordinatedGraphics::DrawingMonitor::didDraw()
@@ -456,10 +458,12 @@
         m_timer.startOneShot(16_ms);
 }
 
-void DrawingAreaProxyCoordinatedGraphics::dispatchAfterEnsuringDrawing(Function<void()>&& callbackFunction)
+void DrawingAreaProxyCoordinatedGraphics::dispatchAfterEnsuringDrawing(WTF::Function<void(CallbackBase::Error)>&& callbackFunction)
 {
-    if (!m_webPageProxy.hasRunningProcess())
-        return callbackFunction();
+    if (!m_webPageProxy.hasRunningProcess()) {
+        callbackFunction(CallbackBase::Error::OwnerWasInvalidated);
+        return;
+    }
 
     if (!m_drawingMonitor)
         m_drawingMonitor = makeUnique<DrawingAreaProxyCoordinatedGraphics::DrawingMonitor>(m_webPageProxy);

Modified: trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/CoordinatedGraphics/DrawingAreaProxyCoordinatedGraphics.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -88,7 +88,7 @@
     void discardBackingStore();
 #endif
 
-    void dispatchAfterEnsuringDrawing(Function<void()>&&) override;
+    void dispatchAfterEnsuringDrawing(WTF::Function<void(CallbackBase::Error)>&&) override;
 
     class DrawingMonitor {
         WTF_MAKE_NONCOPYABLE(DrawingMonitor); WTF_MAKE_FAST_ALLOCATED;
@@ -96,7 +96,7 @@
         DrawingMonitor(WebPageProxy&);
         ~DrawingMonitor();
 
-        void start(Function<void()>&&);
+        void start(WTF::Function<void(CallbackBase::Error)>&&);
 
     private:
         static int webViewDrawCallback(DrawingMonitor*);
@@ -105,7 +105,7 @@
         void didDraw();
 
         MonotonicTime m_startTime;
-        Function<void()> m_callback;
+        WTF::Function<void(CallbackBase::Error)> m_callback;
         RunLoop::Timer<DrawingMonitor> m_timer;
 #if PLATFORM(GTK)
         WebPageProxy& m_webPage;

Modified: trunk/Source/WebKit/UIProcess/DrawingAreaProxy.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/DrawingAreaProxy.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/DrawingAreaProxy.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -26,8 +26,8 @@
 
 #pragma once
 
-#include "CallbackID.h"
 #include "DrawingAreaInfo.h"
+#include "GenericCallback.h"
 #include "MessageReceiver.h"
 #include "MessageSender.h"
 #include <WebCore/FloatRect.h>
@@ -98,7 +98,7 @@
 
     virtual void waitForDidUpdateActivityState(ActivityStateChangeID) { }
     
-    virtual void dispatchAfterEnsuringDrawing(Function<void()>&&) { ASSERT_NOT_REACHED(); }
+    virtual void dispatchAfterEnsuringDrawing(WTF::Function<void (CallbackBase::Error)>&&) { ASSERT_NOT_REACHED(); }
 
     // Hide the content until the currently pending update arrives.
     virtual void hideContentUntilPendingUpdate() { ASSERT_NOT_REACHED(); }

Added: trunk/Source/WebKit/UIProcess/GenericCallback.h (0 => 282889)


--- trunk/Source/WebKit/UIProcess/GenericCallback.h	                        (rev 0)
+++ trunk/Source/WebKit/UIProcess/GenericCallback.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "APIError.h"
+#include "APISerializedScriptValue.h"
+#include "CallbackID.h"
+#include "ProcessThrottler.h"
+#include "ShareableBitmap.h"
+#include "WKAPICast.h"
+#include <wtf/Function.h>
+#include <wtf/HashMap.h>
+#include <wtf/MainThread.h>
+#include <wtf/RefCounted.h>
+#include <wtf/Threading.h>
+
+namespace WebKit {
+
+class CallbackBase : public RefCounted<CallbackBase> {
+public:
+    enum class Error {
+        None,
+        Unknown,
+        ProcessExited,
+        OwnerWasInvalidated,
+    };
+
+    virtual ~CallbackBase()
+    {
+    }
+
+    CallbackID callbackID() const { return m_callbackID; }
+
+    template<class T>
+    T* as()
+    {
+        if (T::type() == m_type)
+            return static_cast<T*>(this);
+
+        return nullptr;
+    }
+
+    virtual void invalidate(Error) = 0;
+
+protected:
+    struct TypeTag { };
+    typedef const TypeTag* Type;
+
+    explicit CallbackBase(Type type, ProcessThrottler::ActivityVariant&& activity)
+        : m_type(type)
+        , m_callbackID(CallbackID::generateID())
+        , m_activity(WTFMove(activity))
+    {
+    }
+
+private:
+    Type m_type;
+    CallbackID m_callbackID;
+    ProcessThrottler::ActivityVariant m_activity;
+};
+
+template<typename... T>
+class GenericCallback : public CallbackBase {
+public:
+    typedef Function<void (T..., Error)> CallbackFunction;
+
+    static Ref<GenericCallback> create(CallbackFunction&& callback, ProcessThrottler::ActivityVariant&& activity = nullptr)
+    {
+        return adoptRef(*new GenericCallback(WTFMove(callback), WTFMove(activity)));
+    }
+
+    virtual ~GenericCallback()
+    {
+        ASSERT(m_originThread.ptr() == &Thread::current());
+        ASSERT(!m_callback);
+    }
+
+    void performCallbackWithReturnValue(T... returnValue)
+    {
+        ASSERT(m_originThread.ptr() == &Thread::current());
+
+        if (!m_callback)
+            return;
+
+        auto callback = std::exchange(m_callback, std::nullopt);
+        callback.value()(returnValue..., Error::None);
+    }
+
+    void performCallback()
+    {
+        performCallbackWithReturnValue();
+    }
+
+    void invalidate(Error error = Error::Unknown) final
+    {
+        ASSERT(m_originThread.ptr() == &Thread::current());
+
+        if (!m_callback)
+            return;
+
+        auto callback = std::exchange(m_callback, std::nullopt);
+        callback.value()(typename std::remove_reference<T>::type()..., error);
+    }
+
+private:
+    GenericCallback(CallbackFunction&& callback, ProcessThrottler::ActivityVariant&& activity)
+        : CallbackBase(type(), WTFMove(activity))
+        , m_callback(WTFMove(callback))
+    {
+    }
+
+    friend class CallbackBase;
+    static Type type()
+    {
+        static TypeTag tag;
+        return &tag;
+    }
+
+    std::optional<CallbackFunction> m_callback;
+
+#if ASSERT_ENABLED
+    Ref<Thread> m_originThread { Thread::current() };
+#endif
+};
+
+typedef GenericCallback<> VoidCallback;
+
+template<typename T>
+void invalidateCallbackMap(HashMap<uint64_t, T>& callbackMap, CallbackBase::Error error)
+{
+    auto map = WTFMove(callbackMap);
+    for (auto& callback : map.values())
+        callback->invalidate(error);
+}
+
+class CallbackMap {
+public:
+    CallbackID put(Ref<CallbackBase>&& callback)
+    {
+        RELEASE_ASSERT(RunLoop::isMain());
+        auto callbackID = callback->callbackID();
+        RELEASE_ASSERT(callbackID.isValid());
+        RELEASE_ASSERT(!m_map.contains(callbackID.m_id));
+        m_map.set(callbackID.m_id, WTFMove(callback));
+        return callbackID;
+    }
+
+    template<unsigned I, typename T, typename... U>
+    struct GenericCallbackType {
+        typedef typename GenericCallbackType<I - 1, U..., T>::type type;
+    };
+
+    template<typename... U>
+    struct GenericCallbackType<1, CallbackBase::Error, U...> {
+        typedef GenericCallback<U...> type;
+    };
+
+    template<typename... T>
+    CallbackID put(Function<void(T...)>&& function, ProcessThrottler::ActivityVariant&& activity)
+    {
+        auto callback = GenericCallbackType<sizeof...(T), T...>::type::create(WTFMove(function), WTFMove(activity));
+        return put(WTFMove(callback));
+    }
+
+    template<class T>
+    RefPtr<T> take(CallbackID callbackID)
+    {
+        RELEASE_ASSERT(callbackID.isValid());
+        RELEASE_ASSERT(RunLoop::isMain());
+        auto base = m_map.take(callbackID.m_id);
+        if (!base)
+            return nullptr;
+
+        return adoptRef(base.leakRef()->as<T>());
+    }
+
+    void invalidate(CallbackBase::Error error)
+    {
+        RELEASE_ASSERT(RunLoop::isMain());
+        invalidateCallbackMap(m_map, error);
+    }
+
+private:
+    HashMap<uint64_t, RefPtr<CallbackBase>> m_map;
+};
+
+} // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/Inspector/WebInspectorUIExtensionControllerProxy.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -29,7 +29,6 @@
 #if ENABLE(INSPECTOR_EXTENSIONS)
 
 #include "APIInspectorExtension.h"
-#include "APISerializedScriptValue.h"
 #include "WebInspectorUIExtensionControllerMessages.h"
 #include "WebInspectorUIExtensionControllerProxyMessages.h"
 #include "WebPageProxy.h"

Modified: trunk/Source/WebKit/UIProcess/Inspector/gtk/WebInspectorUIProxyGtk.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/Inspector/gtk/WebInspectorUIProxyGtk.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/Inspector/gtk/WebInspectorUIProxyGtk.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -31,11 +31,9 @@
 
 #include "APINavigation.h"
 #include "APINavigationAction.h"
-#include "WKAPICast.h"
 #include "WKArray.h"
 #include "WKContextMenuItem.h"
 #include "WKMutableArray.h"
-#include "WKSharedAPICast.h"
 #include "WebFramePolicyListenerProxy.h"
 #include "WebInspectorUIMessages.h"
 #include "WebInspectorUIProxyClient.h"

Modified: trunk/Source/WebKit/UIProcess/Inspector/mac/WKInspectorViewController.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/Inspector/mac/WKInspectorViewController.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/Inspector/mac/WKInspectorViewController.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -29,7 +29,7 @@
 #if PLATFORM(MAC)
 
 #import "APINavigation.h"
-#import "WKAPICast.h"
+#import <WebKit/WKFrameInfo.h>
 #import "WKInspectorResourceURLSchemeHandler.h"
 #import "WKInspectorWKWebView.h"
 #import <WebKit/WKNavigationAction.h>
@@ -45,7 +45,6 @@
 #import "WebPageProxy.h"
 #import "_WKInspectorConfigurationInternal.h"
 #import <WebCore/VersionChecks.h>
-#import <WebKit/WKFrameInfo.h>
 #import <wtf/WeakObjCPtr.h>
 
 static NSString * const WKInspectorResourceScheme = @"inspector-resource";

Modified: trunk/Source/WebKit/UIProcess/Inspector/win/WebInspectorUIProxyWin.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/Inspector/win/WebInspectorUIProxyWin.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/Inspector/win/WebInspectorUIProxyWin.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -32,7 +32,6 @@
 #include "APIPageConfiguration.h"
 #include "InspectorResourceURLSchemeHandler.h"
 #include "PageClientImpl.h"
-#include "WKAPICast.h"
 #include "WebFramePolicyListenerProxy.h"
 #include "WebPageGroup.h"
 #include "WebPageProxy.h"

Modified: trunk/Source/WebKit/UIProcess/Notifications/WebNotificationManagerProxy.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/Notifications/WebNotificationManagerProxy.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/Notifications/WebNotificationManagerProxy.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -29,7 +29,6 @@
 #include "APIArray.h"
 #include "APINotificationProvider.h"
 #include "APISecurityOrigin.h"
-#include "WKSharedAPICast.h"
 #include "WebNotification.h"
 #include "WebNotificationManagerMessages.h"
 #include "WebPageProxy.h"

Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -26,7 +26,6 @@
 #pragma once
 
 #include "DrawingAreaProxy.h"
-#include "ProcessThrottler.h"
 #include "RemoteLayerTreeHost.h"
 #include "TransactionID.h"
 #include <WebCore/AnimationFrameRate.h>
@@ -69,7 +68,7 @@
     
     // For now, all callbacks are called before committing changes, because that's what the only client requires.
     // Once we have other callbacks, it may make sense to have a before-commit/after-commit option.
-    void dispatchAfterEnsuringDrawing(Function<void()>&&) final;
+    void dispatchAfterEnsuringDrawing(WTF::Function<void (CallbackBase::Error)>&&) final;
 
 #if PLATFORM(MAC)
     void didChangeViewExposedRect() final;
@@ -121,7 +120,7 @@
     TransactionID m_transactionIDForUnhidingContent;
     ActivityStateChangeID m_activityStateChangeID { ActivityStateChangeAsynchronous };
 
-    HashMap<CallbackID, std::pair<Function<void()>, std::unique_ptr<ProcessThrottler::BackgroundActivity>>> m_callbacks;
+    CallbackMap m_callbacks;
 
     RetainPtr<WKOneShotDisplayLinkHandler> m_displayLinkHandler;
 };

Modified: trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/RemoteLayerTree/RemoteLayerTreeDrawingAreaProxy.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -127,6 +127,7 @@
 
 RemoteLayerTreeDrawingAreaProxy::~RemoteLayerTreeDrawingAreaProxy()
 {
+    m_callbacks.invalidate(CallbackBase::Error::OwnerWasInvalidated);
     process().removeMessageReceiver(Messages::RemoteLayerTreeDrawingAreaProxy::messageReceiverName(), m_identifier);
 
 #if PLATFORM(IOS_FAMILY)
@@ -268,8 +269,8 @@
         m_webPageProxy.didReachLayoutMilestone(milestones);
 
     for (auto& callbackID : layerTreeTransaction.callbackIDs()) {
-        if (auto callback = m_callbacks.take(callbackID).first)
-            callback();
+        if (auto callback = m_callbacks.take<VoidCallback>(callbackID))
+            callback->performCallback();
     }
 }
 
@@ -470,16 +471,14 @@
     }
 }
 
-void RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing(Function<void()>&& callbackFunction)
+void RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing(WTF::Function<void (CallbackBase::Error)>&& callbackFunction)
 {
     if (!m_webPageProxy.hasRunningProcess()) {
-        callbackFunction();
+        callbackFunction(CallbackBase::Error::OwnerWasInvalidated);
         return;
     }
 
-    auto callbackID = CallbackID::generateID();
-    m_callbacks.set(callbackID, std::make_pair(WTFMove(callbackFunction), process().throttler().backgroundActivity("RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing"_s).moveToUniquePtr()));
-    send(Messages::DrawingArea::AddTransactionCallbackID(callbackID));
+    send(Messages::DrawingArea::AddTransactionCallbackID(m_callbacks.put(WTFMove(callbackFunction), process().throttler().backgroundActivity("RemoteLayerTreeDrawingAreaProxy::dispatchAfterEnsuringDrawing"_s))));
 }
 
 void RemoteLayerTreeDrawingAreaProxy::hideContentUntilPendingUpdate()

Modified: trunk/Source/WebKit/UIProcess/WebContextClient.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/WebContextClient.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/WebContextClient.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -26,7 +26,6 @@
 #include "config.h"
 #include "WebContextClient.h"
 
-#include "WKAPICast.h"
 #include "WebProcessPool.h"
 
 namespace WebKit {

Modified: trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -26,9 +26,9 @@
 #pragma once
 
 #include "APIObject.h"
+#include "GenericCallback.h"
 #include "MessageReceiver.h"
 #include "WebContextSupplement.h"
-#include <WebCore/HTTPCookieAcceptPolicy.h>
 #include <pal/SessionID.h>
 #include <wtf/Forward.h>
 #include <wtf/HashMap.h>

Modified: trunk/Source/WebKit/UIProcess/WebFrameProxy.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/WebFrameProxy.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/WebFrameProxy.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -27,6 +27,7 @@
 
 #include "APIObject.h"
 #include "FrameLoadState.h"
+#include "GenericCallback.h"
 #include "WebFramePolicyListenerProxy.h"
 #include "WebPageProxy.h"
 #include <WebCore/FrameLoaderTypes.h>
@@ -40,7 +41,6 @@
 
 namespace API {
 class Navigation;
-class URL;
 }
 
 namespace IPC {

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -52,7 +52,6 @@
 #include "APIPolicyClient.h"
 #include "APIResourceLoadClient.h"
 #include "APISecurityOrigin.h"
-#include "APISerializedScriptValue.h"
 #include "APIUIClient.h"
 #include "APIURLRequest.h"
 #include "APIWebsitePolicies.h"
@@ -4479,7 +4478,9 @@
     m_drawingArea->waitForBackingStoreUpdateOnNextPaint();
 
     sendWithAsyncReply(Messages::WebPage::ForceRepaint(), [this, protectedThis = Ref { *this }, callback = WTFMove(callback)] () mutable {
-        callAfterNextPresentationUpdate(WTFMove(callback));
+        callAfterNextPresentationUpdate([callback = WTFMove(callback)] (auto) mutable {
+            callback();
+        });
     });
 }
 
@@ -9829,10 +9830,12 @@
     send(Messages::WebPage::ClearWheelEventTestMonitor());
 }
 
-void WebPageProxy::callAfterNextPresentationUpdate(Function<void()>&& callback)
+void WebPageProxy::callAfterNextPresentationUpdate(WTF::Function<void (CallbackBase::Error)>&& callback)
 {
-    if (!hasRunningProcess() || !m_drawingArea)
-        return callback();
+    if (!hasRunningProcess() || !m_drawingArea) {
+        callback(CallbackBase::Error::OwnerWasInvalidated);
+        return;
+    }
 
     m_drawingArea->dispatchAfterEnsuringDrawing(WTFMove(callback));
 }

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -68,7 +68,6 @@
 #include "WebContextMenuItemData.h"
 #include "WebCoreArgumentCoders.h"
 #include "WebDataListSuggestionsDropdown.h"
-#include "WebEvent.h"
 #include "WebFrameProxy.h"
 #include "WebPageCreationParameters.h"
 #include "WebPageDiagnosticLoggingClient.h"
@@ -199,7 +198,6 @@
 #endif
 
 namespace API {
-class Array;
 class Attachment;
 class ContentWorld;
 class ContextMenuClient;
@@ -210,19 +208,13 @@
 class FormClient;
 class FullscreenClient;
 class HistoryClient;
-class HitTestResult;
 class IconLoadingClient;
 class LoaderClient;
 class Navigation;
-class NavigationAction;
 class NavigationClient;
-class NavigationResponse;
-class PageConfiguration;
 class PolicyClient;
 class ResourceLoadClient;
-class SerializedScriptValue;
 class UIClient;
-class URL;
 class URLRequest;
 }
 
@@ -344,10 +336,7 @@
 namespace WebKit {
 
 class AudioSessionRoutingArbitratorProxy;
-class AuthenticationChallengeProxy;
-class CallbackID;
 class DrawingAreaProxy;
-class DownloadProxy;
 class GamepadData;
 class MediaUsageManager;
 class NativeWebGestureEvent;
@@ -371,7 +360,6 @@
 class WebBackForwardListItem;
 class WebContextMenuProxy;
 class WebEditCommandProxy;
-class WebFrameProxy;
 class WebFullScreenManagerProxy;
 class PlaybackSessionManagerProxy;
 class UserMediaPermissionRequestProxy;
@@ -379,7 +367,6 @@
 class WebAuthenticatorCoordinatorProxy;
 class WebBackForwardCache;
 class WebDeviceOrientationUpdateProviderProxy;
-class WebInspectorUIProxy;
 class WebKeyboardEvent;
 class WebMouseEvent;
 class WebNavigationState;
@@ -424,7 +411,6 @@
 struct WebPopupItem;
 struct WebSpeechSynthesisVoice;
 
-enum class FindOptions : uint16_t;
 enum class ImageAnalysisType : uint8_t;
 enum class TapHandlingResult : uint8_t;
 enum class TextRecognitionUpdateResult : uint8_t;
@@ -434,8 +420,6 @@
 enum class UndoOrRedo : bool;
 enum class WebContentMode : uint8_t;
 
-typedef uint32_t SnapshotOptions;
-
 #if HAVE(VISIBILITY_PROPAGATION_VIEW)
 using LayerHostingContextID = uint32_t;
 #endif
@@ -1635,7 +1619,7 @@
 
     // For testing
     void clearWheelEventTestMonitor();
-    void callAfterNextPresentationUpdate(Function<void()>&&);
+    void callAfterNextPresentationUpdate(WTF::Function<void (CallbackBase::Error)>&&);
 
     void didReachLayoutMilestone(OptionSet<WebCore::LayoutMilestone>);
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2021-09-22 23:18:25 UTC (rev 282889)
@@ -36,8 +36,6 @@
 #include "APINavigation.h"
 #include "APIPageConfiguration.h"
 #include "APIProcessPoolConfiguration.h"
-#include "APIString.h"
-#include "APIURLRequest.h"
 #include "AuxiliaryProcessMessages.h"
 #include "DownloadProxy.h"
 #include "DownloadProxyMessages.h"
@@ -57,7 +55,6 @@
 #include "TextChecker.h"
 #include "UIGamepad.h"
 #include "UIGamepadProvider.h"
-#include "WKAPICast.h"
 #include "WKContextPrivate.h"
 #include "WebAutomationSession.h"
 #include "WebBackForwardCache.h"

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -29,6 +29,7 @@
 #include "APIObject.h"
 #include "APIProcessPoolConfiguration.h"
 #include "GPUProcessProxy.h"
+#include "GenericCallback.h"
 #include "HiddenPageThrottlingAutoIncreasesCounter.h"
 #include "MessageReceiver.h"
 #include "MessageReceiverMap.h"

Modified: trunk/Source/WebKit/UIProcess/ios/ViewGestureControllerIOS.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/ios/ViewGestureControllerIOS.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/ios/ViewGestureControllerIOS.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -371,9 +371,9 @@
             return;
         }
 
-        drawingArea->dispatchAfterEnsuringDrawing([pageID, gestureID] {
+        drawingArea->dispatchAfterEnsuringDrawing([pageID, gestureID] (CallbackBase::Error error) {
             if (auto gestureController = controllerForGesture(pageID, gestureID))
-                gestureController->willCommitPostSwipeTransitionLayerTree(true);
+                gestureController->willCommitPostSwipeTransitionLayerTree(error == CallbackBase::Error::None);
         });
         drawingArea->hideContentUntilPendingUpdate();
     };

Modified: trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -4931,7 +4931,7 @@
 {
     _ignoreSelectionCommandFadeCount++;
     _page->scheduleFullEditorStateUpdate();
-    _page->callAfterNextPresentationUpdate([weakSelf = WeakObjCPtr<WKContentView>(self)] {
+    _page->callAfterNextPresentationUpdate([weakSelf = WeakObjCPtr<WKContentView>(self)] (auto) {
         if (auto strongSelf = weakSelf.get())
             strongSelf->_ignoreSelectionCommandFadeCount--;
     });
@@ -8996,7 +8996,7 @@
         RELEASE_LOG(DragAndDrop, "Drag interaction willAnimateCancelWithAnimator (animation completion block fired)");
         page->dragCancelled();
         if (auto completion = protectedSelf->_dragDropInteractionState.takeDragCancelSetDownBlock()) {
-            page->callAfterNextPresentationUpdate([completion, protectedSelf] {
+            page->callAfterNextPresentationUpdate([completion, protectedSelf] (WebKit::CallbackBase::Error) {
                 completion();
                 protectedSelf->_isAnimatingDragCancel = NO;
             });

Modified: trunk/Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -52,7 +52,7 @@
     void commitTransientZoom(double scale, WebCore::FloatPoint origin) override;
 
     void waitForDidUpdateActivityState(ActivityStateChangeID) override;
-    void dispatchAfterEnsuringDrawing(Function<void()>&&) override;
+    void dispatchAfterEnsuringDrawing(WTF::Function<void (CallbackBase::Error)>&&) override;
     void dispatchPresentationCallbacksAfterFlushingLayers(const Vector<CallbackID>&) final;
 
     void willSendUpdateGeometry() override;
@@ -76,7 +76,7 @@
     // The last maxmium size for size-to-content auto-sizing we sent to the web process.
     WebCore::IntSize m_lastSentSizeToContentAutoSizeMaximumSize;
 
-    HashMap<CallbackID, Function<void()>> m_callbacks;
+    CallbackMap m_callbacks;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -50,6 +50,7 @@
 
 TiledCoreAnimationDrawingAreaProxy::~TiledCoreAnimationDrawingAreaProxy()
 {
+    m_callbacks.invalidate(CallbackBase::Error::OwnerWasInvalidated);
 }
 
 void TiledCoreAnimationDrawingAreaProxy::deviceScaleFactorDidChange()
@@ -202,23 +203,21 @@
     send(Messages::DrawingArea::CommitTransientZoom(scale, origin));
 }
 
-void TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing(Function<void()>&& callback)
+void TiledCoreAnimationDrawingAreaProxy::dispatchAfterEnsuringDrawing(WTF::Function<void (CallbackBase::Error)>&& callback)
 {
     if (!m_webPageProxy.hasRunningProcess()) {
-        callback();
+        callback(CallbackBase::Error::OwnerWasInvalidated);
         return;
     }
 
-    auto callbackID = CallbackID::generateID();
-    m_callbacks.set(callbackID, WTFMove(callback));
-    send(Messages::DrawingArea::AddTransactionCallbackID(callbackID));
+    send(Messages::DrawingArea::AddTransactionCallbackID(m_callbacks.put(WTFMove(callback), nullptr)));
 }
 
 void TiledCoreAnimationDrawingAreaProxy::dispatchPresentationCallbacksAfterFlushingLayers(const Vector<CallbackID>& callbackIDs)
 {
     for (auto& callbackID : callbackIDs) {
-        if (auto callback = m_callbacks.take(callbackID))
-            callback();
+        if (auto callback = m_callbacks.take<VoidCallback>(callbackID))
+            callback->performCallback();
     }
 }
 

Modified: trunk/Source/WebKit/UIProcess/mac/WKFullScreenWindowController.h (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/mac/WKFullScreenWindowController.h	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/mac/WKFullScreenWindowController.h	2021-09-22 23:18:25 UTC (rev 282889)
@@ -26,6 +26,7 @@
 #if ENABLE(FULLSCREEN_API) && PLATFORM(MAC)
 
 #import <AppKit/AppKit.h>
+#import "GenericCallback.h"
 #import <wtf/NakedPtr.h>
 #import <wtf/NakedRef.h>
 #import <wtf/RetainPtr.h>

Modified: trunk/Source/WebKit/UIProcess/mac/WKTextFinderClient.mm (282888 => 282889)


--- trunk/Source/WebKit/UIProcess/mac/WKTextFinderClient.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/UIProcess/mac/WKTextFinderClient.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -30,7 +30,6 @@
 
 #import "APIFindClient.h"
 #import "APIFindMatchesClient.h"
-#import "WebFindOptions.h"
 #import "WebImage.h"
 #import "WebPageProxy.h"
 #import <algorithm>

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (282888 => 282889)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2021-09-22 23:18:25 UTC (rev 282889)
@@ -1698,6 +1698,7 @@
 		BC14DF9F120B635F00826C0C /* WKBundleScriptWorld.h in Headers */ = {isa = PBXBuildFile; fileRef = BC14DF9D120B635F00826C0C /* WKBundleScriptWorld.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		BC14E10A120B905E00826C0C /* InjectedBundlePageFormClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC14E108120B905E00826C0C /* InjectedBundlePageFormClient.h */; };
 		BC177465118B9FF4007D9E9A /* WKPagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BC177464118B9FF4007D9E9A /* WKPagePrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		BC17753F118BABF0007D9E9A /* GenericCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = BC17753E118BABF0007D9E9A /* GenericCallback.h */; };
 		BC1A7C581136E19C00FB7167 /* ProcessLauncher.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1A7C571136E19C00FB7167 /* ProcessLauncher.h */; };
 		BC1B419811D41D570011E8DD /* WKBundlePagePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1B419711D41D570011E8DD /* WKBundlePagePrivate.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		BC1BE1E012D54A410004A228 /* WebGeolocationClient.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1BE1DE12D54A410004A228 /* WebGeolocationClient.h */; };
@@ -5347,6 +5348,7 @@
 		BC14E107120B905E00826C0C /* InjectedBundlePageFormClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundlePageFormClient.cpp; sourceTree = "<group>"; };
 		BC14E108120B905E00826C0C /* InjectedBundlePageFormClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InjectedBundlePageFormClient.h; sourceTree = "<group>"; };
 		BC177464118B9FF4007D9E9A /* WKPagePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKPagePrivate.h; sourceTree = "<group>"; };
+		BC17753E118BABF0007D9E9A /* GenericCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenericCallback.h; sourceTree = "<group>"; };
 		BC1A7C571136E19C00FB7167 /* ProcessLauncher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProcessLauncher.h; sourceTree = "<group>"; };
 		BC1B419711D41D570011E8DD /* WKBundlePagePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKBundlePagePrivate.h; sourceTree = "<group>"; };
 		BC1BE1DE12D54A410004A228 /* WebGeolocationClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebGeolocationClient.h; sourceTree = "<group>"; };
@@ -10206,6 +10208,7 @@
 				1A6422FC12DD08FE00CAAE2C /* DrawingAreaProxy.messages.in */,
 				1AE00D5E1831792100087DD7 /* FrameLoadState.cpp */,
 				1AE00D5F1831792100087DD7 /* FrameLoadState.h */,
+				BC17753E118BABF0007D9E9A /* GenericCallback.h */,
 				9EC532A22447FBAD00215216 /* GeolocationIdentifier.h */,
 				BC06F44912DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.cpp */,
 				BC06F44812DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.h */,
@@ -12233,6 +12236,7 @@
 				CD19D2EA2046406F0017074A /* FullscreenTouchSecheuristic.h in Headers */,
 				CDA93DB022F8BCF400490A69 /* FullscreenTouchSecheuristicParameters.h in Headers */,
 				515BE1B31D5902DD00DD7C68 /* GamepadData.h in Headers */,
+				BC17753F118BABF0007D9E9A /* GenericCallback.h in Headers */,
 				9EC532A32447FBAD00215216 /* GeolocationIdentifier.h in Headers */,
 				BC06F42F12DBB9B6002D78DE /* GeolocationPermissionRequestManager.h in Headers */,
 				BC06F44A12DBD1F5002D78DE /* GeolocationPermissionRequestManagerProxy.h in Headers */,

Modified: trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm (282888 => 282889)


--- trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm	2021-09-22 23:07:09 UTC (rev 282888)
+++ trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeContext.mm	2021-09-22 23:18:25 UTC (rev 282889)
@@ -26,6 +26,7 @@
 #import "config.h"
 #import "RemoteLayerTreeContext.h"
 
+#import "GenericCallback.h"
 #import "GraphicsLayerCARemote.h"
 #import "PlatformCALayerRemote.h"
 #import "RemoteLayerBackingStoreCollection.h"
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to