Title: [274227] trunk/Source
Revision
274227
Author
[email protected]
Date
2021-03-10 11:58:31 -0800 (Wed, 10 Mar 2021)

Log Message

[Cocoa] Make WebKit API Objective-C objects safe to release on non-main threads
https://bugs.webkit.org/show_bug.cgi?id=223013

Reviewed by Geoffrey Garen.

Source/WebCore:

* platform/mac/WebCoreObjCExtras.h: Added WebCoreObjCScheduleDeallocateOnMainRunLoop.
Use #pragma once.

* platform/mac/WebCoreObjCExtras.mm:
(safeIsKindOfClass): Added. Allows us to use the functions below on classes that
play proxying tricks with the isKindOfClass: method.
(WebCoreObjCScheduleDeallocateOnMainThread): Use safeIsKindOfClass.
(WebCoreObjCScheduleDeallocateOnMainRunLoop): Added.

Source/WebKit:

Used ensureOnMainRunLoop in dealloc methods where possible to make them
thread-safe. Used WebCoreObjCScheduleDeallocateOnMainRunLoop instead in cases
that were too complex to be done with ensureOnMainRunLoop.

* Shared/API/APIFrameHandle.cpp:
(API::FrameHandle::~FrameHandle): Deleted.
* Shared/API/APIFrameHandle.h: Use pragma once. Marked the class final.
Removed explicit destructor because it is not helpful.

* Shared/API/Cocoa/_WKFrameHandle.mm:
(-[_WKFrameHandle dealloc]): Use WebCoreObjCScheduleDeallocateOnMainRunLoop.
* Shared/API/Cocoa/_WKHitTestResult.mm:
(-[_WKHitTestResult dealloc]): Ditto.
* Shared/Cocoa/WKNSArray.mm:
(-[WKNSArray dealloc]): Ditto.
* Shared/Cocoa/WKNSData.mm:
(-[WKNSData dealloc]): Ditto.
* Shared/Cocoa/WKNSDictionary.mm:
(-[WKNSDictionary dealloc]): Ditto.
* Shared/Cocoa/WKObject.mm:
(-[WKObject dealloc]): Ditto.

* UIProcess/API/C/mac/WKPagePrivateMac.mm:
(-[WKObservablePageState dealloc]): Use ensureOnMainRunLoop.

* UIProcess/API/Cocoa/PageLoadStateObserver.h: Added clearObject for use in
the WKObservablePageState deallc method. Removed header guards since this is
an Objective-C header and #import takes care of it.

* UIProcess/API/Cocoa/WKBackForwardList.mm:
(-[WKBackForwardList dealloc]): Use WebCoreObjCScheduleDeallocateOnMainRunLoop.
* UIProcess/API/Cocoa/WKBackForwardListItem.mm:
(-[WKBackForwardListItem dealloc]): Ditto.
* UIProcess/API/Cocoa/WKBrowsingContextController.mm:
(-[WKBrowsingContextController dealloc]): Ditto.
* UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
(-[WKBrowsingContextGroup dealloc]): Ditto.
* UIProcess/API/Cocoa/WKConnection.mm:
(-[WKConnection dealloc]): Ditto.
* UIProcess/API/Cocoa/WKContentRuleList.mm:
(-[WKContentRuleList dealloc]): Ditto.
* UIProcess/API/Cocoa/WKContentRuleListStore.mm:
(-[WKContentRuleListStore dealloc]): Ditto.
* UIProcess/API/Cocoa/WKContentWorld.mm:
(-[WKContentWorld dealloc]): Ditto.
* UIProcess/API/Cocoa/WKDownload.mm:
(-[WKDownload dealloc]): Ditto.
* UIProcess/API/Cocoa/WKFrameInfo.mm:
(-[WKFrameInfo dealloc]): Ditto.
* UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
(-[WKHTTPCookieStore dealloc]): Ditto.
* UIProcess/API/Cocoa/WKNavigation.mm:
(-[WKNavigation dealloc]): Ditto.
* UIProcess/API/Cocoa/WKNavigationAction.mm:
(-[WKNavigationAction dealloc]): Ditto.
* UIProcess/API/Cocoa/WKNavigationData.mm:
(-[WKNavigationData dealloc]): Ditto.
* UIProcess/API/Cocoa/WKNavigationResponse.mm:
(-[WKNavigationResponse dealloc]): Ditto.
* UIProcess/API/Cocoa/WKPreferences.mm:
(-[WKPreferences dealloc]): Ditto.
* UIProcess/API/Cocoa/WKProcessPool.mm:
(-[WKProcessPool dealloc]): Ditto.
* UIProcess/API/Cocoa/WKSecurityOrigin.mm:
(-[WKSecurityOrigin dealloc]): Ditto.
* UIProcess/API/Cocoa/WKUserContentController.mm:
(-[WKUserContentController dealloc]): Ditto.
* UIProcess/API/Cocoa/WKUserScript.mm:
(-[WKUserScript dealloc]): Ditto.
* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView dealloc]): Ditto.
* UIProcess/API/Cocoa/WKWebpagePreferences.mm:
(-[WKWebpagePreferences dealloc]): Ditto.
* UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
(-[WKWebsiteDataRecord dealloc]): Ditto.
* UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore dealloc]): Ditto.
* UIProcess/API/Cocoa/WKWindowFeatures.mm:
(-[WKWindowFeatures dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKApplicationManifest.mm:
(-[_WKApplicationManifest dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKAttachment.mm:
(-[_WKAttachment dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKAutomationSession.mm:
(-[_WKAutomationSession dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKContentRuleListAction.mm:
(-[_WKContentRuleListAction dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKCustomHeaderFields.mm:
(-[_WKCustomHeaderFields dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKExperimentalFeature.mm:
(-[_WKExperimentalFeature dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKFrameTreeNode.mm:
(-[_WKFrameTreeNode dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKGeolocationPosition.mm:
(-[_WKGeolocationPosition dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKInspectorConfiguration.mm:
(-[_WKInspectorConfiguration dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKInspectorDebuggableInfo.mm:
(-[_WKInspectorDebuggableInfo dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKInspectorExtension.mm:
(-[_WKInspectorExtension dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKInternalDebugFeature.mm:
(-[_WKInternalDebugFeature dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
(-[_WKProcessPoolConfiguration dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKResourceLoadInfo.mm:
(-[_WKResourceLoadInfo dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.mm:
(-[_WKResourceLoadStatisticsFirstParty dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.mm:
(-[_WKResourceLoadStatisticsThirdParty dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKUserInitiatedAction.mm:
(-[_WKUserInitiatedAction dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
(-[_WKUserStyleSheet dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKVisitedLinkStore.mm:
(-[_WKVisitedLinkStore dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponse.mm:
(-[_WKWebAuthenticationAssertionResponse dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
(-[_WKWebAuthenticationPanel dealloc]): Ditto.
* UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
(-[_WKWebsiteDataStoreConfiguration dealloc]): Ditto.
* UIProcess/API/mac/WKView.mm:
(-[WKView dealloc]): Ditto.

* UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
(-[WKSafeBrowsingWarning dealloc]): Use ensureOnMainRunLoop.
* UIProcess/mac/WKPrintingView.mm:
(-[WKPrintingView dealloc]): Ditto.

* WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
(-[WKWebProcessPlugInFrame dealloc]): Use WebCoreObjCScheduleDeallocateOnMainRunLoop.
* WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.mm:
(-[WKWebProcessPlugInHitTestResult dealloc]): Ditto.
* WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
(-[WKWebProcessPlugInNodeHandle dealloc]): Ditto.
* WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm:
(-[WKWebProcessPlugInPageGroup dealloc]): Ditto.
* WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm:
(-[WKWebProcessPlugInRangeHandle dealloc]): Ditto.
* WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm:
(-[WKWebProcessPlugInScriptWorld dealloc]): Ditto.

* WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
(-[WKDOMNode dealloc]): Use ensureOnMainRunLoop.
* WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
(-[WKDOMRange dealloc]): Ditto.

* WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
(-[WKWebProcessPlugInController dealloc]): Use WebCoreObjCScheduleDeallocateOnMainRunLoop.
* WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
(-[WKWebProcessPlugInBrowserContextController dealloc]): Ditto.

Source/WTF:

* wtf/MainThread.cpp:
(WTF::ensureOnMainRunLoop): Added. For use in cases where we want to be more
efficient, and synchronous, when already on the main run loop, but we can do
the work asynchronously when called and not on the main run loop.

* wtf/MainThread.h: Added ensureOnMainRunLoop.

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (274226 => 274227)


--- trunk/Source/WTF/ChangeLog	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WTF/ChangeLog	2021-03-10 19:58:31 UTC (rev 274227)
@@ -1,3 +1,17 @@
+2021-03-09  Darin Adler  <[email protected]>
+
+        [Cocoa] Make WebKit API Objective-C objects safe to release on non-main threads
+        https://bugs.webkit.org/show_bug.cgi?id=223013
+
+        Reviewed by Geoffrey Garen.
+
+        * wtf/MainThread.cpp:
+        (WTF::ensureOnMainRunLoop): Added. For use in cases where we want to be more
+        efficient, and synchronous, when already on the main run loop, but we can do
+        the work asynchronously when called and not on the main run loop.
+
+        * wtf/MainThread.h: Added ensureOnMainRunLoop.
+
 2021-03-10  Michael Catanzaro  <[email protected]>
 
         [GTK] Reenable -fvisibility=hidden

Modified: trunk/Source/WTF/wtf/MainThread.cpp (274226 => 274227)


--- trunk/Source/WTF/wtf/MainThread.cpp	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WTF/wtf/MainThread.cpp	2021-03-10 19:58:31 UTC (rev 274227)
@@ -68,6 +68,14 @@
     RunLoop::main().dispatch(WTFMove(function));
 }
 
+void ensureOnMainRunLoop(Function<void()>&& function)
+{
+    if (RunLoop::isMain())
+        function();
+    else
+        RunLoop::main().dispatch(WTFMove(function));
+}
+
 void callOnMainThread(Function<void()>&& function)
 {
 #if USE(WEB_THREAD)

Modified: trunk/Source/WTF/wtf/MainThread.h (274226 => 274227)


--- trunk/Source/WTF/wtf/MainThread.h	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WTF/wtf/MainThread.h	2021-03-10 19:58:31 UTC (rev 274227)
@@ -57,6 +57,7 @@
 WTF_EXPORT_PRIVATE bool isMainRunLoop();
 WTF_EXPORT_PRIVATE void callOnMainRunLoop(Function<void()>&&);
 WTF_EXPORT_PRIVATE void callOnMainRunLoopAndWait(Function<void()>&&);
+WTF_EXPORT_PRIVATE void ensureOnMainRunLoop(Function<void()>&&); // Sync if called on main run loop, async otherwise.
 
 #if USE(WEB_THREAD)
 WTF_EXPORT_PRIVATE bool isWebThread();
@@ -79,6 +80,7 @@
 using WTF::callOnMainThreadAndWait;
 using WTF::callOnMainRunLoop;
 using WTF::callOnMainRunLoopAndWait;
+using WTF::ensureOnMainRunLoop;
 using WTF::canCurrentThreadAccessThreadLocalData;
 using WTF::isMainRunLoop;
 using WTF::isMainThread;
@@ -85,10 +87,12 @@
 using WTF::isMainThreadOrGCThread;
 using WTF::isUIThread;
 using WTF::isWebThread;
+
 #if PLATFORM(COCOA)
 using WTF::dispatchAsyncOnMainThreadWithWebThreadLockIfNeeded;
 using WTF::callOnWebThreadOrDispatchAsyncOnMainThread;
 #endif
+
 #if USE(WEB_THREAD)
 using WTF::initializeWebThread;
 using WTF::initializeApplicationUIThread;

Modified: trunk/Source/WebCore/ChangeLog (274226 => 274227)


--- trunk/Source/WebCore/ChangeLog	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebCore/ChangeLog	2021-03-10 19:58:31 UTC (rev 274227)
@@ -1,3 +1,19 @@
+2021-03-09  Darin Adler  <[email protected]>
+
+        [Cocoa] Make WebKit API Objective-C objects safe to release on non-main threads
+        https://bugs.webkit.org/show_bug.cgi?id=223013
+
+        Reviewed by Geoffrey Garen.
+
+        * platform/mac/WebCoreObjCExtras.h: Added WebCoreObjCScheduleDeallocateOnMainRunLoop.
+        Use #pragma once.
+
+        * platform/mac/WebCoreObjCExtras.mm:
+        (safeIsKindOfClass): Added. Allows us to use the functions below on classes that
+        play proxying tricks with the isKindOfClass: method.
+        (WebCoreObjCScheduleDeallocateOnMainThread): Use safeIsKindOfClass.
+        (WebCoreObjCScheduleDeallocateOnMainRunLoop): Added.
+
 2021-03-10  Devin Rousso  <[email protected]>
 
         Unreviewed, fix the internal build

Modified: trunk/Source/WebCore/platform/mac/WebCoreObjCExtras.h (274226 => 274227)


--- trunk/Source/WebCore/platform/mac/WebCoreObjCExtras.h	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebCore/platform/mac/WebCoreObjCExtras.h	2021-03-10 19:58:31 UTC (rev 274227)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ * Copyright (C) 2007-2021 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -6,13 +6,13 @@
  * are met:
  *
  * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
+ *     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. 
  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
  *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission. 
+ *     from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -26,13 +26,8 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef WebCoreObjCExtras_h
-#define WebCoreObjCExtras_h
+#pragma once
 
-#include <CoreFoundation/CFBase.h>
-
-// The 'Class' that should be passed in here is the class of the
-// object that implements the dealloc method that this function is called from.
-WEBCORE_EXPORT bool WebCoreObjCScheduleDeallocateOnMainThread(Class cls, id);
-
-#endif // WebCoreObjCExtras_h
+// The class passed here is the class that implements the dealloc method that this function is called from.
+WEBCORE_EXPORT bool WebCoreObjCScheduleDeallocateOnMainThread(Class, id);
+WEBCORE_EXPORT bool WebCoreObjCScheduleDeallocateOnMainRunLoop(Class, id);

Modified: trunk/Source/WebCore/platform/mac/WebCoreObjCExtras.mm (274226 => 274227)


--- trunk/Source/WebCore/platform/mac/WebCoreObjCExtras.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebCore/platform/mac/WebCoreObjCExtras.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ * Copyright (C) 2007-2021 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -6,13 +6,13 @@
  * are met:
  *
  * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer. 
+ *     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. 
  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
  *     its contributors may be used to endorse or promote products derived
- *     from this software without specific prior written permission. 
+ *     from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
@@ -35,18 +35,49 @@
 #import <wtf/ObjCRuntimeExtras.h>
 #import <wtf/Threading.h>
 
-bool WebCoreObjCScheduleDeallocateOnMainThread(Class cls, id object)
+#if ASSERT_ENABLED
+
+// This is like the isKindOfClass: method, bypassing it to get the correct answer for our purposes even for classes that override it.
+// At the time of this writing, that included WebKit's WKObject class.
+static bool safeIsKindOfClass(id object, Class testClass)
 {
-    ASSERT([object isKindOfClass:cls]);
+    if (!object)
+        return false;
+    for (auto ancestorClass = object_getClass(object); ancestorClass; ancestorClass = class_getSuperclass(ancestorClass)) {
+        if (ancestorClass == testClass)
+            return true;
+    }
+    return false;
+}
 
+#endif
+
+bool WebCoreObjCScheduleDeallocateOnMainThread(Class deallocMethodClass, id object)
+{
+    ASSERT(safeIsKindOfClass(object, deallocMethodClass));
+
     if (isMainThread())
         return false;
 
-    callOnMainThread([cls, object] {
+    callOnMainThread([deallocMethodClass, object] {
         auto deallocSelector = sel_registerName("dealloc");
-        wtfCallIMP<void>(method_getImplementation(class_getInstanceMethod(cls, deallocSelector)), object, deallocSelector);
+        wtfCallIMP<void>(method_getImplementation(class_getInstanceMethod(deallocMethodClass, deallocSelector)), object, deallocSelector);
     });
 
     return true;
 }
 
+bool WebCoreObjCScheduleDeallocateOnMainRunLoop(Class deallocMethodClass, id object)
+{
+    ASSERT(safeIsKindOfClass(object, deallocMethodClass));
+
+    if (isMainRunLoop())
+        return false;
+
+    callOnMainRunLoop([deallocMethodClass, object] {
+        auto deallocSelector = sel_registerName("dealloc");
+        wtfCallIMP<void>(method_getImplementation(class_getInstanceMethod(deallocMethodClass, deallocSelector)), object, deallocSelector);
+    });
+
+    return true;
+}

Modified: trunk/Source/WebKit/ChangeLog (274226 => 274227)


--- trunk/Source/WebKit/ChangeLog	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/ChangeLog	2021-03-10 19:58:31 UTC (rev 274227)
@@ -1,3 +1,164 @@
+2021-03-09  Darin Adler  <[email protected]>
+
+        [Cocoa] Make WebKit API Objective-C objects safe to release on non-main threads
+        https://bugs.webkit.org/show_bug.cgi?id=223013
+
+        Reviewed by Geoffrey Garen.
+
+        Used ensureOnMainRunLoop in dealloc methods where possible to make them
+        thread-safe. Used WebCoreObjCScheduleDeallocateOnMainRunLoop instead in cases
+        that were too complex to be done with ensureOnMainRunLoop.
+
+        * Shared/API/APIFrameHandle.cpp:
+        (API::FrameHandle::~FrameHandle): Deleted.
+        * Shared/API/APIFrameHandle.h: Use pragma once. Marked the class final.
+        Removed explicit destructor because it is not helpful.
+
+        * Shared/API/Cocoa/_WKFrameHandle.mm:
+        (-[_WKFrameHandle dealloc]): Use WebCoreObjCScheduleDeallocateOnMainRunLoop.
+        * Shared/API/Cocoa/_WKHitTestResult.mm:
+        (-[_WKHitTestResult dealloc]): Ditto.
+        * Shared/Cocoa/WKNSArray.mm:
+        (-[WKNSArray dealloc]): Ditto.
+        * Shared/Cocoa/WKNSData.mm:
+        (-[WKNSData dealloc]): Ditto.
+        * Shared/Cocoa/WKNSDictionary.mm:
+        (-[WKNSDictionary dealloc]): Ditto.
+        * Shared/Cocoa/WKObject.mm:
+        (-[WKObject dealloc]): Ditto.
+
+        * UIProcess/API/C/mac/WKPagePrivateMac.mm:
+        (-[WKObservablePageState dealloc]): Use ensureOnMainRunLoop.
+
+        * UIProcess/API/Cocoa/PageLoadStateObserver.h: Added clearObject for use in
+        the WKObservablePageState deallc method. Removed header guards since this is
+        an Objective-C header and #import takes care of it.
+
+        * UIProcess/API/Cocoa/WKBackForwardList.mm:
+        (-[WKBackForwardList dealloc]): Use WebCoreObjCScheduleDeallocateOnMainRunLoop.
+        * UIProcess/API/Cocoa/WKBackForwardListItem.mm:
+        (-[WKBackForwardListItem dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKBrowsingContextController.mm:
+        (-[WKBrowsingContextController dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKBrowsingContextGroup.mm:
+        (-[WKBrowsingContextGroup dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKConnection.mm:
+        (-[WKConnection dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKContentRuleList.mm:
+        (-[WKContentRuleList dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKContentRuleListStore.mm:
+        (-[WKContentRuleListStore dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKContentWorld.mm:
+        (-[WKContentWorld dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKDownload.mm:
+        (-[WKDownload dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKFrameInfo.mm:
+        (-[WKFrameInfo dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
+        (-[WKHTTPCookieStore dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKNavigation.mm:
+        (-[WKNavigation dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKNavigationAction.mm:
+        (-[WKNavigationAction dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKNavigationData.mm:
+        (-[WKNavigationData dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKNavigationResponse.mm:
+        (-[WKNavigationResponse dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKPreferences.mm:
+        (-[WKPreferences dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKProcessPool.mm:
+        (-[WKProcessPool dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKSecurityOrigin.mm:
+        (-[WKSecurityOrigin dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKUserContentController.mm:
+        (-[WKUserContentController dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKUserScript.mm:
+        (-[WKUserScript dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKWebpagePreferences.mm:
+        (-[WKWebpagePreferences dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKWebsiteDataRecord.mm:
+        (-[WKWebsiteDataRecord dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+        (-[WKWebsiteDataStore dealloc]): Ditto.
+        * UIProcess/API/Cocoa/WKWindowFeatures.mm:
+        (-[WKWindowFeatures dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKApplicationManifest.mm:
+        (-[_WKApplicationManifest dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKAttachment.mm:
+        (-[_WKAttachment dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKAutomationSession.mm:
+        (-[_WKAutomationSession dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKContentRuleListAction.mm:
+        (-[_WKContentRuleListAction dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKCustomHeaderFields.mm:
+        (-[_WKCustomHeaderFields dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKExperimentalFeature.mm:
+        (-[_WKExperimentalFeature dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKFrameTreeNode.mm:
+        (-[_WKFrameTreeNode dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKGeolocationPosition.mm:
+        (-[_WKGeolocationPosition dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKInspectorConfiguration.mm:
+        (-[_WKInspectorConfiguration dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKInspectorDebuggableInfo.mm:
+        (-[_WKInspectorDebuggableInfo dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKInspectorExtension.mm:
+        (-[_WKInspectorExtension dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKInternalDebugFeature.mm:
+        (-[_WKInternalDebugFeature dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm:
+        (-[_WKProcessPoolConfiguration dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKResourceLoadInfo.mm:
+        (-[_WKResourceLoadInfo dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.mm:
+        (-[_WKResourceLoadStatisticsFirstParty dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.mm:
+        (-[_WKResourceLoadStatisticsThirdParty dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKUserInitiatedAction.mm:
+        (-[_WKUserInitiatedAction dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKUserStyleSheet.mm:
+        (-[_WKUserStyleSheet dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKVisitedLinkStore.mm:
+        (-[_WKVisitedLinkStore dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponse.mm:
+        (-[_WKWebAuthenticationAssertionResponse dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm:
+        (-[_WKWebAuthenticationPanel dealloc]): Ditto.
+        * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
+        (-[_WKWebsiteDataStoreConfiguration dealloc]): Ditto.
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView dealloc]): Ditto.
+
+        * UIProcess/Cocoa/WKSafeBrowsingWarning.mm:
+        (-[WKSafeBrowsingWarning dealloc]): Use ensureOnMainRunLoop.
+        * UIProcess/mac/WKPrintingView.mm:
+        (-[WKPrintingView dealloc]): Ditto.
+
+        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm:
+        (-[WKWebProcessPlugInFrame dealloc]): Use WebCoreObjCScheduleDeallocateOnMainRunLoop.
+        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.mm:
+        (-[WKWebProcessPlugInHitTestResult dealloc]): Ditto.
+        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm:
+        (-[WKWebProcessPlugInNodeHandle dealloc]): Ditto.
+        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm:
+        (-[WKWebProcessPlugInPageGroup dealloc]): Ditto.
+        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm:
+        (-[WKWebProcessPlugInRangeHandle dealloc]): Ditto.
+        * WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm:
+        (-[WKWebProcessPlugInScriptWorld dealloc]): Ditto.
+
+        * WebProcess/InjectedBundle/API/mac/WKDOMNode.mm:
+        (-[WKDOMNode dealloc]): Use ensureOnMainRunLoop.
+        * WebProcess/InjectedBundle/API/mac/WKDOMRange.mm:
+        (-[WKDOMRange dealloc]): Ditto.
+
+        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm:
+        (-[WKWebProcessPlugInController dealloc]): Use WebCoreObjCScheduleDeallocateOnMainRunLoop.
+        * WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm:
+        (-[WKWebProcessPlugInBrowserContextController dealloc]): Ditto.
+
 2021-03-10  Wenson Hsieh  <[email protected]>
 
         Logic for updating the text selection when dragging selection handles should account for image overlays

Modified: trunk/Source/WebKit/Shared/API/APIFrameHandle.cpp (274226 => 274227)


--- trunk/Source/WebKit/Shared/API/APIFrameHandle.cpp	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/Shared/API/APIFrameHandle.cpp	2021-03-10 19:58:31 UTC (rev 274227)
@@ -48,10 +48,6 @@
 {
 }
 
-FrameHandle::~FrameHandle()
-{
-}
-
 void FrameHandle::encode(IPC::Encoder& encoder) const
 {
     encoder << m_frameID;

Modified: trunk/Source/WebKit/Shared/API/APIFrameHandle.h (274226 => 274227)


--- trunk/Source/WebKit/Shared/API/APIFrameHandle.h	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/Shared/API/APIFrameHandle.h	2021-03-10 19:58:31 UTC (rev 274227)
@@ -23,8 +23,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef APIFrameHandle_h
-#define APIFrameHandle_h
+#pragma once
 
 #include "APIObject.h"
 #include <WebCore/FrameIdentifier.h>
@@ -37,13 +36,12 @@
 
 namespace API {
 
-class FrameHandle : public ObjectImpl<Object::Type::FrameHandle> {
+class FrameHandle final : public ObjectImpl<Object::Type::FrameHandle> {
 public:
     static Ref<FrameHandle> create(WebCore::FrameIdentifier);
     static Ref<FrameHandle> createAutoconverting(WebCore::FrameIdentifier);
 
     explicit FrameHandle(WebCore::FrameIdentifier, bool isAutoconverting);
-    virtual ~FrameHandle();
 
     WebCore::FrameIdentifier frameID() const { return m_frameID; }
     bool isAutoconverting() const { return m_isAutoconverting; }
@@ -57,5 +55,3 @@
 };
 
 } // namespace API
-
-#endif // APIFrameHandle_h

Modified: trunk/Source/WebKit/Shared/API/Cocoa/_WKFrameHandle.mm (274226 => 274227)


--- trunk/Source/WebKit/Shared/API/Cocoa/_WKFrameHandle.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/Shared/API/Cocoa/_WKFrameHandle.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,11 +27,15 @@
 #import "_WKFrameHandleInternal.h"
 
 #import <WebCore/FrameIdentifier.h>
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation _WKFrameHandle
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKFrameHandle.class, self))
+        return;
+
     _frameHandle->~FrameHandle();
 
     [super dealloc];

Modified: trunk/Source/WebKit/Shared/API/Cocoa/_WKHitTestResult.mm (274226 => 274227)


--- trunk/Source/WebKit/Shared/API/Cocoa/_WKHitTestResult.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/Shared/API/Cocoa/_WKHitTestResult.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -28,10 +28,15 @@
 
 #if PLATFORM(MAC)
 
+#import <WebCore/WebCoreObjCExtras.h>
+
 @implementation _WKHitTestResult
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKHitTestResult.class, self))
+        return;
+
     _hitTestResult->~HitTestResult();
 
     [super dealloc];

Modified: trunk/Source/WebKit/Shared/Cocoa/WKNSArray.mm (274226 => 274227)


--- trunk/Source/WebKit/Shared/Cocoa/WKNSArray.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/Shared/Cocoa/WKNSArray.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,6 +26,8 @@
 #import "config.h"
 #import "WKNSArray.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
+
 @implementation WKNSArray {
     API::ObjectStorage<API::Array> _array;
 }
@@ -32,6 +34,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKNSArray.class, self))
+        return;
+
     _array->~Array();
 
     [super dealloc];

Modified: trunk/Source/WebKit/Shared/Cocoa/WKNSData.mm (274226 => 274227)


--- trunk/Source/WebKit/Shared/Cocoa/WKNSData.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/Shared/Cocoa/WKNSData.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,6 +26,8 @@
 #import "config.h"
 #import "WKNSData.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
+
 @implementation WKNSData {
     API::ObjectStorage<API::Data> _data;
 }
@@ -32,6 +34,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKNSData.class, self))
+        return;
+
     _data->~Data();
 
     [super dealloc];

Modified: trunk/Source/WebKit/Shared/Cocoa/WKNSDictionary.mm (274226 => 274227)


--- trunk/Source/WebKit/Shared/Cocoa/WKNSDictionary.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/Shared/Cocoa/WKNSDictionary.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,6 +27,7 @@
 #import "WKNSDictionary.h"
 
 #import "WKNSArray.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 using namespace WebKit;
 
@@ -36,6 +37,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKNSDictionary.class, self))
+        return;
+
     _dictionary->~Dictionary();
 
     [super dealloc];

Modified: trunk/Source/WebKit/Shared/Cocoa/WKObject.mm (274226 => 274227)


--- trunk/Source/WebKit/Shared/Cocoa/WKObject.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/Shared/Cocoa/WKObject.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,6 +27,7 @@
 #import "WKObject.h"
 
 #import "APIObject.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/RetainPtr.h>
 
 @interface NSObject ()
@@ -51,6 +52,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKObject.class, self))
+        return;
+
     API::Object::fromWKObjectExtraSpace(self).~Object();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/C/mac/WKPagePrivateMac.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/C/mac/WKPagePrivateMac.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/C/mac/WKPagePrivateMac.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -37,6 +37,7 @@
 #import "WebPageProxy.h"
 #import "WebPreferences.h"
 #import "WebProcessPool.h"
+#import <wtf/MainThread.h>
 
 @interface WKObservablePageState : NSObject <_WKObservablePageState> {
     RefPtr<WebKit::WebPageProxy> _page;
@@ -61,8 +62,12 @@
 
 - (void)dealloc
 {
-    _page->pageLoadState().removeObserver(*_observer);
+    _observer->clearObject();
 
+    ensureOnMainRunLoop([page = WTFMove(_page), observer = WTFMove(_observer)] {
+        page->pageLoadState().removeObserver(*observer);
+    });
+
     [super dealloc];
 }
 

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/PageLoadStateObserver.h (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/PageLoadStateObserver.h	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/PageLoadStateObserver.h	2021-03-10 19:58:31 UTC (rev 274227)
@@ -23,9 +23,6 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef PageLoadStateObserver_h
-#define PageLoadStateObserver_h
-
 #import "PageLoadState.h"
 
 namespace WebKit {
@@ -39,6 +36,11 @@
     {
     }
 
+    void clearObject()
+    {
+        m_object = nil;
+    }
+
 private:
     void willChangeIsLoading() override
     {
@@ -115,5 +117,3 @@
 };
 
 }
-
-#endif // PageLoadStateObserver_h

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKBackForwardList.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKBackForwardList.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKBackForwardList.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -28,6 +28,7 @@
 
 #import "WKBackForwardListItemInternal.h"
 #import "WKNSArray.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKBackForwardList {
     API::ObjectStorage<WebKit::WebBackForwardList> _list;
@@ -35,6 +36,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKBackForwardList.class, self))
+        return;
+
     _list->~WebBackForwardList();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKBackForwardListItem.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKBackForwardListItem.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKBackForwardListItem.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,6 +27,7 @@
 #import "WKBackForwardListItemInternal.h"
 
 #import "WKNSURLExtras.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKBackForwardListItem {
     API::ObjectStorage<WebKit::WebBackForwardListItem> _item;
@@ -34,6 +35,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKBackForwardListItem.class, self))
+        return;
+
     _item->~WebBackForwardListItem();
 
     [super dealloc];

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


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextController.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextController.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -56,6 +56,7 @@
 #import "WebProcessPool.h"
 #import "WebProtectionSpace.h"
 #import "_WKRemoteObjectRegistryInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/NeverDestroyed.h>
 #import <wtf/WeakObjCPtr.h>
 
@@ -90,6 +91,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKBrowsingContextController.class, self))
+        return;
+
     ASSERT(browsingContextControllerMap().get(_page.get()) == self);
     browsingContextControllerMap().remove(_page.get());
 

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextGroup.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextGroup.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKBrowsingContextGroup.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -38,6 +38,7 @@
 #import "WKStringCF.h"
 #import "WKURL.h"
 #import "WKURLCF.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/Vector.h>
 
 ALLOW_DEPRECATED_IMPLEMENTATIONS_BEGIN
@@ -48,6 +49,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKBrowsingContextGroup.class, self))
+        return;
+
     _pageGroup->~WebPageGroup();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKConnection.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKConnection.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKConnection.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -30,6 +30,7 @@
 #import "WKRetainPtr.h"
 #import "WKSharedAPICast.h"
 #import "WKStringCF.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/RetainPtr.h>
 #import <wtf/WeakObjCPtr.h>
 #import <wtf/text/WTFString.h>
@@ -42,6 +43,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKConnection.class, self))
+        return;
+
     self._connection.~WebConnection();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKContentRuleList.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKContentRuleList.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKContentRuleList.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,11 +27,15 @@
 #import "WKContentRuleListInternal.h"
 
 #import "WebCompiledContentRuleList.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKContentRuleList
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKContentRuleList.class, self))
+        return;
+
     _contentRuleList->~ContentRuleList();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKContentRuleListStore.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKContentRuleListStore.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKContentRuleListStore.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -30,6 +30,7 @@
 #import "APIContentRuleListStore.h"
 #import "NetworkCacheFileSystem.h"
 #import "WKErrorInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/BlockPtr.h>
 #import <wtf/CompletionHandler.h>
 #import <wtf/cocoa/VectorCocoa.h>
@@ -55,6 +56,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKContentRuleListStore.class, self))
+        return;
+
     _contentRuleListStore->~ContentRuleListStore();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKContentWorld.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKContentWorld.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKContentWorld.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,6 +27,7 @@
 #import "WKContentWorldInternal.h"
 
 #import "_WKUserContentWorldInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKContentWorld
 
@@ -47,6 +48,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKContentWorld.class, self))
+        return;
+
     _contentWorld->~ContentWorld();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKDownload.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKDownload.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKDownload.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -34,6 +34,7 @@
 #import "WKNSURLAuthenticationChallenge.h"
 #import "WKWebViewInternal.h"
 #import <Foundation/Foundation.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/WeakObjCPtr.h>
 
 class DownloadClient final : public API::DownloadClient {
@@ -242,6 +243,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKDownload.class, self))
+        return;
     _download->~DownloadProxy();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKFrameInfo.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKFrameInfo.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKFrameInfo.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -29,11 +29,15 @@
 #import "WKSecurityOriginInternal.h"
 #import "WKWebViewInternal.h"
 #import "_WKFrameHandleInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKFrameInfo
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKFrameInfo.class, self))
+        return;
+
     _frameInfo->~FrameInfo();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStore.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStore.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStore.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -29,6 +29,7 @@
 #import <WebCore/Cookie.h>
 #import <WebCore/HTTPCookieAcceptPolicy.h>
 #import <WebCore/HTTPCookieAcceptPolicyCocoa.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <pal/spi/cf/CFNetworkSPI.h>
 #import <wtf/BlockPtr.h>
 #import <wtf/HashMap.h>
@@ -67,6 +68,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKHTTPCookieStore.class, self))
+        return;
+
     for (auto& observer : _observers.values())
         _cookieStore->unregisterObserver(*observer);
 

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigation.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -28,6 +28,7 @@
 #import "WKWebpagePreferencesInternal.h"
 
 #import "APINavigation.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKNavigation {
     API::ObjectStorage<API::Navigation> _navigation;
@@ -35,6 +36,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKNavigation.class, self))
+        return;
+
     _navigation->~Navigation();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationAction.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationAction.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationAction.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -32,6 +32,7 @@
 #import "WebEventFactory.h"
 #import "_WKUserInitiatedActionInternal.h"
 #import <WebCore/FloatPoint.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/RetainPtr.h>
 
 #if PLATFORM(IOS_FAMILY)
@@ -79,6 +80,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKNavigationAction.class, self))
+        return;
+
     _navigationAction->~NavigationAction();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationData.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationData.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationData.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -29,6 +29,7 @@
 #import "WKNSURLExtras.h"
 #import <WebCore/ResourceRequest.h>
 #import <WebCore/ResourceResponse.h>
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKNavigationData {
     API::ObjectStorage<API::NavigationData> _data;
@@ -36,6 +37,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKNavigationData.class, self))
+        return;
+
     _data->~NavigationData();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationResponse.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationResponse.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKNavigationResponse.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,11 +27,15 @@
 #import "WKNavigationResponseInternal.h"
 
 #import "WKFrameInfoInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKNavigationResponse
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKNavigationResponse.class, self))
+        return;
+
     _navigationResponse->~NavigationResponse();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -34,6 +34,7 @@
 #import "_WKInternalDebugFeatureInternal.h"
 #import <WebCore/SecurityOrigin.h>
 #import <WebCore/Settings.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/RetainPtr.h>
 
 @implementation WKPreferences
@@ -49,6 +50,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKPreferences.class, self))
+        return;
+
     _preferences->~WebPreferences();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -53,6 +53,7 @@
 #import <WebCore/HTTPCookieAcceptPolicyCocoa.h>
 #import <WebCore/PluginData.h>
 #import <WebCore/RegistrableDomain.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <pal/spi/cf/CFNetworkSPI.h>
 #import <wtf/BlockPtr.h>
 #import <wtf/RetainPtr.h>
@@ -99,6 +100,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKProcessPool.class, self))
+        return;
+
     _processPool->~WebProcessPool();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKSecurityOrigin.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKSecurityOrigin.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKSecurityOrigin.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -28,6 +28,7 @@
 
 #import <WebCore/ResourceRequest.h>
 #import <WebCore/SecurityOrigin.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/RefPtr.h>
 
 @implementation WKSecurityOrigin
@@ -34,6 +35,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKSecurityOrigin.class, self))
+        return;
+
     _securityOrigin->~SecurityOrigin();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKUserContentController.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKUserContentController.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKUserContentController.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -46,6 +46,7 @@
 #import <WebCore/SecurityOrigin.h>
 #import <WebCore/SecurityOriginData.h>
 #import <WebCore/SerializedScriptValue.h>
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKUserContentController
 
@@ -61,6 +62,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKUserContentController.class, self))
+        return;
+
     _userContentControllerProxy->~WebUserContentControllerProxy();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKUserScript.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKUserScript.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKUserScript.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -28,6 +28,7 @@
 
 #import "WKContentWorldInternal.h"
 #import "_WKUserContentWorldInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/cocoa/VectorCocoa.h>
 
 @implementation WKUserScript
@@ -49,6 +50,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKUserScript.class, self))
+        return;
+
     _userScript->~UserScript();
 
     [super dealloc];

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


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -138,6 +138,7 @@
 #import <WebCore/TextManipulationController.h>
 #import <WebCore/VersionChecks.h>
 #import <WebCore/ViewportArguments.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <WebCore/WebViewVisualIdentificationOverlay.h>
 #import <WebCore/WritingMode.h>
 #import <wtf/BlockPtr.h>
@@ -616,6 +617,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebView.class, self))
+        return;
+
 #if PLATFORM(MAC)
     [_textFinderClient willDestroyView:self];
 #endif

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebpagePreferences.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -34,6 +34,7 @@
 #import "_WKCustomHeaderFieldsInternal.h"
 #import "_WKWebsitePoliciesInternal.h"
 #import <WebCore/DocumentLoader.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/RetainPtr.h>
 
 namespace WebKit {
@@ -109,6 +110,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebpagePreferences.class, self))
+        return;
+
     _websitePolicies->API::WebsitePolicies::~WebsitePolicies();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataRecord.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -28,6 +28,7 @@
 
 #import "_WKWebsiteDataSizeInternal.h"
 #import <WebCore/SecurityOriginData.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/HashSet.h>
 
 NSString * const WKWebsiteDataTypeFetchCache = @"WKWebsiteDataTypeFetchCache";
@@ -60,6 +61,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebsiteDataRecord.class, self))
+        return;
+
     _websiteDataRecord->API::WebsiteDataRecord::~WebsiteDataRecord();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebsiteDataStore.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -44,6 +44,7 @@
 #import <WebCore/Credential.h>
 #import <WebCore/RegistrationDatabase.h>
 #import <WebCore/VersionChecks.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/BlockPtr.h>
 #import <wtf/URL.h>
 #import <wtf/WeakObjCPtr.h>
@@ -131,6 +132,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebsiteDataStore.class, self))
+        return;
+
     _websiteDataStore->WebKit::WebsiteDataStore::~WebsiteDataStore();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWindowFeatures.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWindowFeatures.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWindowFeatures.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,6 +26,7 @@
 #import "config.h"
 #import "WKWindowFeaturesInternal.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
 #import <WebCore/WindowFeatures.h>
 #import <wtf/RetainPtr.h>
 
@@ -33,6 +34,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWindowFeatures.class, self))
+        return;
+
     _windowFeatures->API::WindowFeatures::~WindowFeatures();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKApplicationManifest.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -28,6 +28,7 @@
 
 #import <WebCore/ApplicationManifest.h>
 #import <WebCore/ApplicationManifestParser.h>
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation _WKApplicationManifest
 
@@ -63,6 +64,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKApplicationManifest.class, self))
+        return;
+
     _applicationManifest->~ApplicationManifest();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAttachment.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAttachment.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAttachment.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -31,6 +31,7 @@
 #import "_WKAttachmentInternal.h"
 #import <WebCore/MIMETypeRegistry.h>
 #import <WebCore/SharedBuffer.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/BlockPtr.h>
 #import <wtf/CompletionHandler.h>
 
@@ -105,6 +106,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKAttachment.class, self))
+        return;
+
     _attachment->~Attachment();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAutomationSession.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAutomationSession.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKAutomationSession.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -32,6 +32,7 @@
 #import "WebAutomationSession.h"
 #import "_WKAutomationSessionConfiguration.h"
 #import "_WKAutomationSessionDelegate.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/WeakObjCPtr.h>
 
 @implementation _WKAutomationSession {
@@ -58,6 +59,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKAutomationSession.class, self))
+        return;
+
     _session->setClient(nullptr);
     _session->~WebAutomationSession();
 

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKContentRuleListAction.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKContentRuleListAction.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKContentRuleListAction.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,6 +26,7 @@
 #import "config.h"
 #import "_WKContentRuleListActionInternal.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/cocoa/VectorCocoa.h>
 
 @implementation _WKContentRuleListAction
@@ -32,6 +33,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKContentRuleListAction.class, self))
+        return;
+
     _action->~ContentRuleListAction();
     
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKCustomHeaderFields.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKCustomHeaderFields.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKCustomHeaderFields.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,6 +27,7 @@
 #import "_WKCustomHeaderFields.h"
 
 #import "_WKCustomHeaderFieldsInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/BlockPtr.h>
 #import <wtf/cocoa/VectorCocoa.h>
 
@@ -43,6 +44,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKCustomHeaderFields.class, self))
+        return;
     _fields->API::CustomHeaderFields::~CustomHeaderFields();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKExperimentalFeature.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKExperimentalFeature.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKExperimentalFeature.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,10 +26,15 @@
 #import "config.h"
 #import "_WKExperimentalFeatureInternal.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
+
 @implementation _WKExperimentalFeature
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKExperimentalFeature.class, self))
+        return;
+
     _experimentalFeature->API::ExperimentalFeature::~ExperimentalFeature();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKFrameTreeNode.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKFrameTreeNode.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKFrameTreeNode.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -29,6 +29,7 @@
 #import "WKWebViewInternal.h"
 #import "_WKFrameHandleInternal.h"
 #import "_WKFrameTreeNodeInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/cocoa/VectorCocoa.h>
 
 @implementation _WKFrameTreeNode
@@ -35,6 +36,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKFrameTreeNode.class, self))
+        return;
     _node->API::FrameTreeNode::~FrameTreeNode();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKGeolocationPosition.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKGeolocationPosition.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKGeolocationPosition.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -29,6 +29,7 @@
 #if PLATFORM(IOS_FAMILY)
 
 #import <CoreLocation/CLLocation.h>
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation _WKGeolocationPosition
 
@@ -42,6 +43,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKGeolocationPosition.class, self))
+        return;
+
     _geolocationPosition->~WebGeolocationPosition();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorConfiguration.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorConfiguration.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorConfiguration.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -29,6 +29,7 @@
 #import "WKProcessPoolInternal.h"
 #import "WKWebViewConfigurationPrivate.h"
 #import "WebURLSchemeHandlerCocoa.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation _WKInspectorConfiguration
 
@@ -44,6 +45,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKInspectorConfiguration.class, self))
+        return;
     _configuration->API::InspectorConfiguration::~InspectorConfiguration();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorDebuggableInfo.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorDebuggableInfo.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorDebuggableInfo.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,6 +26,8 @@
 #import "config.h"
 #import "_WKInspectorDebuggableInfoInternal.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
+
 @implementation _WKInspectorDebuggableInfo
 
 - (instancetype)init
@@ -90,6 +92,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKInspectorDebuggableInfo.class, self))
+        return;
+
     _debuggableInfo->~DebuggableInfo();
 
     [super dealloc];

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


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInspectorExtension.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -33,6 +33,7 @@
 #import "WKError.h"
 #import "WKWebViewInternal.h"
 #import <WebCore/ExceptionDetails.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/BlockPtr.h>
 #import <wtf/URL.h>
 
@@ -40,6 +41,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKInspectorExtension.class, self))
+        return;
+
     _extension->API::InspectorExtension::~InspectorExtension();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInternalDebugFeature.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInternalDebugFeature.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKInternalDebugFeature.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,10 +26,15 @@
 #import "config.h"
 #import "_WKInternalDebugFeatureInternal.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
+
 @implementation _WKInternalDebugFeature
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKInternalDebugFeature.class, self))
+        return;
+
     _internalDebugFeature->API::InternalDebugFeature::~InternalDebugFeature();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKProcessPoolConfiguration.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,6 +27,7 @@
 #import "_WKProcessPoolConfigurationInternal.h"
 
 #import "LegacyGlobalSettings.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <objc/runtime.h>
 #import <wtf/RetainPtr.h>
 #import <wtf/cocoa/VectorCocoa.h>
@@ -45,6 +46,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKProcessPoolConfiguration.class, self))
+        return;
+
     _processPoolConfiguration->~ProcessPoolConfiguration();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadInfo.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadInfo.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadInfo.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -31,6 +31,7 @@
 #import "ResourceLoadInfo.h"
 #import "_WKFrameHandleInternal.h"
 #import "_WKResourceLoadInfoInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 static _WKResourceLoadInfoResourceType toWKResourceLoadInfoResourceType(WebKit::ResourceLoadInfo::Type type)
 {
@@ -77,6 +78,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKResourceLoadInfo.class, self))
+        return;
     _info->API::ResourceLoadInfo::~ResourceLoadInfo();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadStatisticsFirstParty.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,10 +26,14 @@
 #import "config.h"
 #import "_WKResourceLoadStatisticsFirstPartyInternal.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
+
 @implementation _WKResourceLoadStatisticsFirstParty
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKResourceLoadStatisticsFirstParty.class, self))
+        return;
     _firstParty->API::ResourceLoadStatisticsFirstParty::~ResourceLoadStatisticsFirstParty();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKResourceLoadStatisticsThirdParty.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,6 +27,7 @@
 #import "_WKResourceLoadStatisticsThirdPartyInternal.h"
 
 #import "APIArray.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/cocoa/VectorCocoa.h>
 
 @implementation _WKResourceLoadStatisticsThirdParty
@@ -33,6 +34,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKResourceLoadStatisticsThirdParty.class, self))
+        return;
     _thirdParty->API::ResourceLoadStatisticsThirdParty::~ResourceLoadStatisticsThirdParty();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserInitiatedAction.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserInitiatedAction.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserInitiatedAction.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,10 +26,15 @@
 #import "config.h"
 #import "_WKUserInitiatedActionInternal.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
+
 @implementation _WKUserInitiatedAction
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKUserInitiatedAction.class, self))
+        return;
+
     _userInitiatedAction->~UserInitiatedAction();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserStyleSheet.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserStyleSheet.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKUserStyleSheet.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -34,6 +34,7 @@
 #import "WebKit2Initialize.h"
 #import "WebPageProxy.h"
 #import "_WKUserContentWorldInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/cocoa/VectorCocoa.h>
 
 @implementation _WKUserStyleSheet
@@ -63,6 +64,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKUserStyleSheet.class, self))
+        return;
+
     _userStyleSheet->~UserStyleSheet();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKVisitedLinkStore.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKVisitedLinkStore.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKVisitedLinkStore.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -28,6 +28,7 @@
 
 #import "VisitedLinkStore.h"
 #import <WebCore/SharedStringHash.h>
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation _WKVisitedLinkStore
 
@@ -43,6 +44,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKVisitedLinkStore.class, self))
+        return;
+
     _visitedLinkStore->~VisitedLinkStore();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponse.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponse.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationAssertionResponse.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,6 +27,7 @@
 #import "_WKWebAuthenticationAssertionResponseInternal.h"
 
 #import "WKNSData.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation _WKWebAuthenticationAssertionResponse
 
@@ -34,6 +35,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKWebAuthenticationAssertionResponse.class, self))
+        return;
+
     _response->~WebAuthenticationAssertionResponse();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebAuthenticationPanel.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -50,6 +50,7 @@
 #import <WebCore/PublicKeyCredentialCreationOptions.h>
 #import <WebCore/PublicKeyCredentialRequestOptions.h>
 #import <WebCore/WebAuthenticationConstants.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <pal/crypto/CryptoDigest.h>
 #import <wtf/BlockPtr.h>
 #import <wtf/RetainPtr.h>
@@ -107,6 +108,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKWebAuthenticationPanel.class, self))
+        return;
+
     _panel->~WebAuthenticationPanel();
 
     [super dealloc];

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,6 +26,7 @@
 #import "config.h"
 #import "_WKWebsiteDataStoreConfigurationInternal.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/RetainPtr.h>
 
 static void checkURLArgument(NSURL *url)
@@ -60,6 +61,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(_WKWebsiteDataStoreConfiguration.class, self))
+        return;
     _configuration->~WebsiteDataStoreConfiguration();
     [super dealloc];
 }

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


--- trunk/Source/WebKit/UIProcess/API/mac/WKView.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/API/mac/WKView.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -43,6 +43,7 @@
 #import "WebProcessPool.h"
 #import "WebViewImpl.h"
 #import "_WKLinkIconParametersInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <WebCore/WebViewVisualIdentificationOverlay.h>
 #import <WebKit/WKDragDestinationAction.h>
 #import <pal/spi/cocoa/AVKitSPI.h>
@@ -90,6 +91,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKView.class, self))
+        return;
+
     _data->_impl->page().setIconLoadingClient(nullptr);
     _data->_impl = nullptr;
 

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WKSafeBrowsingWarning.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/Cocoa/WKSafeBrowsingWarning.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WKSafeBrowsingWarning.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -30,9 +30,11 @@
 #import "PageClient.h"
 #import "SafeBrowsingWarning.h"
 #import <WebCore/LocalizedStrings.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/URL.h>
 #import <wtf/BlockPtr.h>
 #import <wtf/Language.h>
+#import <wtf/MainThread.h>
 
 #if PLATFORM(WATCHOS)
 #import "PepperUICoreSPI.h"
@@ -511,8 +513,10 @@
 
 - (void)dealloc
 {
-    if (_completionHandler)
-        _completionHandler(WebKit::ContinueUnsafeLoad::No);
+    ensureOnMainRunLoop([completionHandler = WTFMove(_completionHandler), warning = WTFMove(_warning)] () mutable {
+        if (completionHandler)
+            completionHandler(WebKit::ContinueUnsafeLoad::No);
+    });
     [super dealloc];
 }
 

Modified: trunk/Source/WebKit/UIProcess/mac/WKPrintingView.mm (274226 => 274227)


--- trunk/Source/WebKit/UIProcess/mac/WKPrintingView.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/UIProcess/mac/WKPrintingView.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -37,7 +37,6 @@
 #import <Quartz/Quartz.h>
 #import <WebCore/GraphicsContext.h>
 #import <WebCore/LocalDefaultSystemAppearance.h>
-#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/RunLoop.h>
 
 NSString * const WebKitOriginalTopPrintingMarginKey = @"WebKitOriginalTopMargin";
@@ -63,7 +62,7 @@
 
 - (void)dealloc
 {
-    callOnMainRunLoop([frame = WTFMove(_webFrame), previews = WTFMove(_pagePreviews)] {
+    ensureOnMainRunLoop([frame = WTFMove(_webFrame), previews = WTFMove(_pagePreviews)] {
         // Deallocate these on the main thread, not the current thread, since the
         // reference counting and the destructors aren't threadsafe.
     });

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInFrame.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -41,6 +41,7 @@
 #import <WebCore/IntPoint.h>
 #import <WebCore/LinkIconCollector.h>
 #import <WebCore/LinkIconType.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/cocoa/VectorCocoa.h>
 
 @implementation WKWebProcessPlugInFrame {
@@ -59,6 +60,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebProcessPlugInFrame.class, self))
+        return;
     _frame->~WebFrame();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInHitTestResult.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -27,6 +27,7 @@
 #import "WKWebProcessPlugInHitTestResultInternal.h"
 
 #import "WKWebProcessPlugInNodeHandleInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKWebProcessPlugInHitTestResult {
     API::ObjectStorage<WebKit::InjectedBundleHitTestResult> _hitTestResult;
@@ -34,6 +35,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebProcessPlugInHitTestResult.class, self))
+        return;
     _hitTestResult->~InjectedBundleHitTestResult();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInNodeHandle.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -31,6 +31,7 @@
 #import "WKWebProcessPlugInFrameInternal.h"
 #import <WebCore/HTMLTextFormControlElement.h>
 #import <WebCore/IntRect.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <WebKit/WebImage.h>
 
 @implementation WKWebProcessPlugInNodeHandle {
@@ -39,6 +40,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebProcessPlugInNodeHandle.class, self))
+        return;
     _nodeHandle->~InjectedBundleNodeHandle();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInPageGroup.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -31,6 +31,7 @@
 #import "WKNSString.h"
 #import "WKRetainPtr.h"
 #import "WebPageGroupProxy.h"
+#import <WebCore/WebCoreObjCExtras.h>
 
 @implementation WKWebProcessPlugInPageGroup {
     API::ObjectStorage<WebKit::WebPageGroupProxy> _bundlePageGroup;
@@ -43,6 +44,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebProcessPlugInPageGroup.class, self))
+        return;
     _bundlePageGroup->~WebPageGroupProxy();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInRangeHandle.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -30,6 +30,7 @@
 #import "WKWebProcessPlugInFrameInternal.h"
 #import <WebCore/DataDetection.h>
 #import <WebCore/Range.h>
+#import <WebCore/WebCoreObjCExtras.h>
 
 #if ENABLE(DATA_DETECTION)
 #import "WKDataDetectorTypesInternal.h"
@@ -41,6 +42,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebProcessPlugInRangeHandle.class, self))
+        return;
     _rangeHandle->~InjectedBundleRangeHandle();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/Cocoa/WKWebProcessPlugInScriptWorld.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -26,6 +26,8 @@
 #import "config.h"
 #import "WKWebProcessPlugInScriptWorldInternal.h"
 
+#import <WebCore/WebCoreObjCExtras.h>
+
 @implementation WKWebProcessPlugInScriptWorld {
     API::ObjectStorage<WebKit::InjectedBundleScriptWorld> _world;
 }
@@ -42,6 +44,8 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebProcessPlugInScriptWorld.class, self))
+        return;
     _world->~InjectedBundleScriptWorld();
     [super dealloc];
 }

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKDOMNode.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKDOMNode.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKDOMNode.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -32,6 +32,7 @@
 #import <WebCore/Document.h>
 #import <WebCore/RenderObject.h>
 #import <WebCore/SimpleRange.h>
+#import <wtf/MainThread.h>
 #import <wtf/cocoa/VectorCocoa.h>
 
 @implementation WKDOMNode
@@ -50,7 +51,9 @@
 
 - (void)dealloc
 {
-    WebKit::WKDOMNodeCache().remove(_impl.get());
+    ensureOnMainRunLoop([node = WTFMove(_impl)] {
+        WebKit::WKDOMNodeCache().remove(node.get());
+    });
     [super dealloc];
 }
 

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKDOMRange.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKDOMRange.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKDOMRange.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -32,6 +32,7 @@
 #import <WebCore/Document.h>
 #import <WebCore/TextIterator.h>
 #import <WebCore/VisibleUnits.h>
+#import <wtf/MainThread.h>
 #import <wtf/cocoa/VectorCocoa.h>
 
 @implementation WKDOMRange
@@ -55,7 +56,9 @@
 
 - (void)dealloc
 {
-    WebKit::WKDOMRangeCache().remove(_impl.get());
+    ensureOnMainRunLoop([range = WTFMove(_impl)] {
+        WebKit::WKDOMRangeCache().remove(range.get());
+    });
     [super dealloc];
 }
 

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugIn.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -33,6 +33,7 @@
 #import "WKRetainPtr.h"
 #import "WKStringCF.h"
 #import "WKWebProcessPlugInBrowserContextControllerInternal.h"
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/RetainPtr.h>
 
 @interface WKWebProcessPlugInController () {
@@ -45,6 +46,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebProcessPlugInController.class, self))
+        return;
+
     _bundle->~InjectedBundle();
 
     [super dealloc];

Modified: trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm (274226 => 274227)


--- trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm	2021-03-10 19:27:23 UTC (rev 274226)
+++ trunk/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm	2021-03-10 19:58:31 UTC (rev 274227)
@@ -61,6 +61,7 @@
 #import <WebCore/Frame.h>
 #import <WebCore/HTMLFormElement.h>
 #import <WebCore/HTMLInputElement.h>
+#import <WebCore/WebCoreObjCExtras.h>
 #import <wtf/WeakObjCPtr.h>
 
 @interface NSObject (WKDeprecatedDelegateMethods)
@@ -369,6 +370,9 @@
 
 - (void)dealloc
 {
+    if (WebCoreObjCScheduleDeallocateOnMainRunLoop(WKWebProcessPlugInBrowserContextController.class, self))
+        return;
+
     if (_remoteObjectRegistry)
         [_remoteObjectRegistry _invalidate];
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to