Title: [245936] branches/safari-607-branch

Diff

Modified: branches/safari-607-branch/Source/WebKit/Shared/API/Cocoa/RemoteObjectRegistry.h (245935 => 245936)


--- branches/safari-607-branch/Source/WebKit/Shared/API/Cocoa/RemoteObjectRegistry.h	2019-05-31 00:33:35 UTC (rev 245935)
+++ branches/safari-607-branch/Source/WebKit/Shared/API/Cocoa/RemoteObjectRegistry.h	2019-05-31 00:33:38 UTC (rev 245936)
@@ -23,12 +23,13 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef RemoteObjectRegistry_h
-#define RemoteObjectRegistry_h
+#pragma once
 
 #include "MessageReceiver.h"
 #include "ProcessThrottler.h"
 #include <wtf/Function.h>
+#include <wtf/WeakObjCPtr.h>
+#include <wtf/WeakPtr.h>
 
 OBJC_CLASS _WKRemoteObjectRegistry;
 
@@ -43,7 +44,7 @@
 class WebPage;
 class WebPageProxy;
 
-class RemoteObjectRegistry final : public IPC::MessageReceiver {
+class RemoteObjectRegistry final : public CanMakeWeakPtr<RemoteObjectRegistry>, public IPC::MessageReceiver {
 public:
     RemoteObjectRegistry(_WKRemoteObjectRegistry *, WebPage&);
     RemoteObjectRegistry(_WKRemoteObjectRegistry *, WebPageProxy&);
@@ -54,6 +55,8 @@
     void sendReplyBlock(uint64_t replyID, const UserData& blockInvocation);
     void sendUnusedReply(uint64_t replyID);
 
+    void close();
+    
 private:
     // IPC::MessageReceiver
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
@@ -63,12 +66,12 @@
     void callReplyBlock(uint64_t replyID, const UserData& blockInvocation);
     void releaseUnusedReplyBlock(uint64_t replyID);
 
-    _WKRemoteObjectRegistry *m_remoteObjectRegistry;
+    WeakObjCPtr<_WKRemoteObjectRegistry> m_remoteObjectRegistry;
     IPC::MessageSender& m_messageSender;
-    WTF::Function<ProcessThrottler::BackgroundActivityToken()> m_takeBackgroundActivityToken;
+    Function<ProcessThrottler::BackgroundActivityToken()> m_takeBackgroundActivityToken;
     HashMap<uint64_t, ProcessThrottler::BackgroundActivityToken> m_pendingReplies;
+    bool m_isRegisteredAsMessageReceiver { false };
+    uint64_t m_messageReceiverID { 0 };
 };
 
 } // namespace WebKit
-
-#endif // RemoteObjectRegistry_h

Modified: branches/safari-607-branch/Source/WebKit/Shared/API/Cocoa/RemoteObjectRegistry.mm (245935 => 245936)


--- branches/safari-607-branch/Source/WebKit/Shared/API/Cocoa/RemoteObjectRegistry.mm	2019-05-31 00:33:35 UTC (rev 245935)
+++ branches/safari-607-branch/Source/WebKit/Shared/API/Cocoa/RemoteObjectRegistry.mm	2019-05-31 00:33:38 UTC (rev 245936)
@@ -32,6 +32,7 @@
 #import "RemoteObjectRegistryMessages.h"
 #import "UserData.h"
 #import "WebPage.h"
+#import "WebProcess.h"
 #import "WebPageProxy.h"
 #import "WebProcessProxy.h"
 #import "_WKRemoteObjectRegistryInternal.h"
@@ -42,7 +43,11 @@
     : m_remoteObjectRegistry(remoteObjectRegistry)
     , m_messageSender(page)
     , m_takeBackgroundActivityToken([] { return ProcessThrottler::BackgroundActivityToken(); })
+    , m_isRegisteredAsMessageReceiver(true)
+    , m_messageReceiverID(page.pageID())
 {
+    WebProcess::singleton().addMessageReceiver(Messages::RemoteObjectRegistry::messageReceiverName(), m_messageReceiverID, *this);
+    page.setRemoteObjectRegistry(*this);
 }
 
 RemoteObjectRegistry::RemoteObjectRegistry(_WKRemoteObjectRegistry *remoteObjectRegistry, WebPageProxy& page)
@@ -55,8 +60,17 @@
 
 RemoteObjectRegistry::~RemoteObjectRegistry()
 {
+    close();
 }
 
+    void RemoteObjectRegistry::close()
+    {
+        if (m_isRegisteredAsMessageReceiver) {
+            WebProcess::singleton().removeMessageReceiver(Messages::RemoteObjectRegistry::messageReceiverName(), m_messageReceiverID);
+            m_isRegisteredAsMessageReceiver = false;
+        }
+    }
+    
 void RemoteObjectRegistry::sendInvocation(const RemoteObjectInvocation& invocation)
 {
     if (auto* replyInfo = invocation.replyInfo()) {

Modified: branches/safari-607-branch/Source/WebKit/Shared/API/Cocoa/_WKRemoteObjectRegistry.mm (245935 => 245936)


--- branches/safari-607-branch/Source/WebKit/Shared/API/Cocoa/_WKRemoteObjectRegistry.mm	2019-05-31 00:33:35 UTC (rev 245935)
+++ branches/safari-607-branch/Source/WebKit/Shared/API/Cocoa/_WKRemoteObjectRegistry.mm	2019-05-31 00:33:38 UTC (rev 245936)
@@ -38,6 +38,7 @@
 #import "WKRemoteObject.h"
 #import "WKRemoteObjectCoder.h"
 #import "WKSharedAPICast.h"
+#import "WebPage.h"
 #import "_WKRemoteObjectInterface.h"
 #import <objc/runtime.h>
 

Modified: branches/safari-607-branch/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm (245935 => 245936)


--- branches/safari-607-branch/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm	2019-05-31 00:33:35 UTC (rev 245935)
+++ branches/safari-607-branch/Source/WebKit/WebProcess/InjectedBundle/API/mac/WKWebProcessPlugInBrowserContextController.mm	2019-05-31 00:33:38 UTC (rev 245936)
@@ -360,10 +360,8 @@
 
 - (void)dealloc
 {
-    if (_remoteObjectRegistry) {
-        WebKit::WebProcess::singleton().removeMessageReceiver(Messages::RemoteObjectRegistry::messageReceiverName(), _page->pageID());
+    if (_remoteObjectRegistry)
         [_remoteObjectRegistry _invalidate];
-    }
 
     _page->~WebPage();
 
@@ -426,10 +424,8 @@
 
 - (_WKRemoteObjectRegistry *)_remoteObjectRegistry
 {
-    if (!_remoteObjectRegistry) {
+    if (!_remoteObjectRegistry)
         _remoteObjectRegistry = adoptNS([[_WKRemoteObjectRegistry alloc] _initWithWebPage:*_page]);
-        WebKit::WebProcess::singleton().addMessageReceiver(Messages::RemoteObjectRegistry::messageReceiverName(), _page->pageID(), [_remoteObjectRegistry remoteObjectRegistry]);
-    }
 
     return _remoteObjectRegistry.get();
 }

Modified: branches/safari-607-branch/Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm (245935 => 245936)


--- branches/safari-607-branch/Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm	2019-05-31 00:33:35 UTC (rev 245935)
+++ branches/safari-607-branch/Source/WebKit/WebProcess/WebPage/Cocoa/WebPageCocoa.mm	2019-05-31 00:33:38 UTC (rev 245936)
@@ -29,6 +29,7 @@
 
 #import "LoadParameters.h"
 #import "PluginView.h"
+#import "RemoteObjectRegistry.h"
 #import "WebPageProxyMessages.h"
 #import <WebCore/DictionaryLookup.h>
 #import <WebCore/Editor.h>
@@ -185,6 +186,11 @@
     send(Messages::WebPageProxy::RegisterWebProcessAccessibilityToken(dataToken));
 }
 
+void WebPage::setRemoteObjectRegistry(RemoteObjectRegistry& registry)
+{
+    m_remoteObjectRegistry = makeWeakPtr(registry);
+}
+
 } // namespace WebKit
 
 #endif // PLATFORM(COCOA)

Modified: branches/safari-607-branch/Source/WebKit/WebProcess/WebPage/WebPage.cpp (245935 => 245936)


--- branches/safari-607-branch/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2019-05-31 00:33:35 UTC (rev 245935)
+++ branches/safari-607-branch/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2019-05-31 00:33:38 UTC (rev 245936)
@@ -244,6 +244,8 @@
 #include "PDFPlugin.h"
 #include "PlaybackSessionManager.h"
 #include "RemoteLayerTreeTransaction.h"
+#include "RemoteObjectRegistry.h"
+#include "RemoteObjectRegistryMessages.h"
 #include "TouchBarMenuData.h"
 #include "TouchBarMenuItemData.h"
 #include "VideoFullscreenManager.h"
@@ -1294,6 +1296,8 @@
     m_isRunningModal = false;
 
     auto& webProcess = WebProcess::singleton();
+    if (m_remoteObjectRegistry)
+        m_remoteObjectRegistry->close();
 #if ENABLE(ASYNC_SCROLLING)
     if (m_useAsyncScrolling)
         webProcess.eventDispatcher().removeScrollingTreeForPage(this);

Modified: branches/safari-607-branch/Source/WebKit/WebProcess/WebPage/WebPage.h (245935 => 245936)


--- branches/safari-607-branch/Source/WebKit/WebProcess/WebPage/WebPage.h	2019-05-31 00:33:35 UTC (rev 245935)
+++ branches/safari-607-branch/Source/WebKit/WebProcess/WebPage/WebPage.h	2019-05-31 00:33:38 UTC (rev 245936)
@@ -204,6 +204,7 @@
 class PDFPlugin;
 class PageBanner;
 class PluginView;
+    class RemoteObjectRegistry;
 class RemoteWebInspectorUI;
 class UserMediaPermissionRequestManager;
 class ViewGestureGeometryCollector;
@@ -1135,6 +1136,7 @@
 
     void didReceiveWebPageMessage(IPC::Connection&, IPC::Decoder&);
 
+    void setRemoteObjectRegistry(RemoteObjectRegistry&);
 private:
     WebPage(uint64_t pageID, WebPageCreationParameters&&);
 
@@ -1804,6 +1806,9 @@
     OptionSet<LayerTreeFreezeReason> m_LayerTreeFreezeReasons;
     bool m_isSuspended { false };
     bool m_needsFontAttributes { false };
+#if PLATFORM(COCOA)
+    WeakPtr<RemoteObjectRegistry> m_remoteObjectRegistry;
+#endif
 };
 
 } // namespace WebKit

Modified: branches/safari-607-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm (245935 => 245936)


--- branches/safari-607-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm	2019-05-31 00:33:35 UTC (rev 245935)
+++ branches/safari-607-branch/Tools/TestWebKitAPI/Tests/WebKitCocoa/BundleRetainPagePlugIn.mm	2019-05-31 00:33:38 UTC (rev 245936)
@@ -28,6 +28,7 @@
 #if WK_API_ENABLED
 
 #import <WebKit/WKWebProcessPlugIn.h>
+#import <WebKit/WKWebProcessPluginBrowserContextControllerPrivate.h>
 #import <wtf/RetainPtr.h>
 
 @interface BundleRetainPagePlugIn : NSObject <WKWebProcessPlugIn>
@@ -38,6 +39,10 @@
 - (void)webProcessPlugIn:(WKWebProcessPlugInController *)plugInController didCreateBrowserContextController:(WKWebProcessPlugInBrowserContextController *)browserContextController
 {
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5*NSEC_PER_SEC), dispatch_get_main_queue(), [retainedPage = retainPtr(browserContextController)] { });
+    
+    // Instantiate a _WKRemoteObjectRegistry to test that its existence does not conflict with the existence
+    // of the _WKRemoteObjectRegistry from the other WebPage that will be in this process.
+    [browserContextController _remoteObjectRegistry];
 }
 
 @end
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to