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