Diff
Modified: trunk/Source/WebKit2/ChangeLog (130971 => 130972)
--- trunk/Source/WebKit2/ChangeLog 2012-10-10 22:31:08 UTC (rev 130971)
+++ trunk/Source/WebKit2/ChangeLog 2012-10-10 22:34:42 UTC (rev 130972)
@@ -1,3 +1,41 @@
+2012-10-10 Anders Carlsson <ander...@apple.com>
+
+ WebContext should be a MessageReceiver
+ https://bugs.webkit.org/show_bug.cgi?id=98958
+
+ Reviewed by Sam Weinig.
+
+ Make WebContext be a MessageReceiver that lives in its own map. This allows us to get rid of the
+ knowsHowToHandleMessage functions on MessageReceiverMap and WebContext.
+
+ * Platform/CoreIPC/Connection.h:
+ (CoreIPC::Connection::client):
+ (Connection):
+ * Platform/CoreIPC/MessageReceiverMap.cpp:
+ (CoreIPC::MessageReceiverMap::addMessageReceiver):
+ (CoreIPC::MessageReceiverMap::invalidate):
+ (CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
+ (CoreIPC::MessageReceiverMap::dispatchMessage):
+ (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
+ * Platform/CoreIPC/MessageReceiverMap.h:
+ (MessageReceiverMap):
+ * UIProcess/WebContext.cpp:
+ (WebKit::WebContext::WebContext):
+ (WebKit::WebContext::~WebContext):
+ (WebKit::WebContext::dispatchMessage):
+ (WebKit::WebContext::dispatchSyncMessage):
+ (WebKit::WebContext::didReceiveMessage):
+ (WebKit::WebContext::didReceiveSyncMessage):
+ * UIProcess/WebContext.h:
+ (WebContext):
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::fromConnection):
+ (WebKit):
+ (WebKit::WebProcessProxy::didReceiveMessage):
+ (WebKit::WebProcessProxy::didReceiveSyncMessage):
+ * UIProcess/WebProcessProxy.h:
+ (WebProcessProxy):
+
2012-10-10 Sam Weinig <s...@webkit.org>
Add skeleton of a WebKit2 ObjC DOM SPI (not intended to be the full DOM)
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.h (130971 => 130972)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2012-10-10 22:31:08 UTC (rev 130971)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2012-10-10 22:34:42 UTC (rev 130972)
@@ -151,6 +151,8 @@
static PassRefPtr<Connection> createClientConnection(Identifier, Client*, WebCore::RunLoop* clientRunLoop);
~Connection();
+ Client* client() const { return m_client; }
+
#if OS(DARWIN)
void setShouldCloseConnectionOnMachExceptions();
#elif PLATFORM(QT)
Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.cpp (130971 => 130972)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.cpp 2012-10-10 22:31:08 UTC (rev 130971)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.cpp 2012-10-10 22:34:42 UTC (rev 130972)
@@ -40,23 +40,23 @@
void MessageReceiverMap::addMessageReceiver(MessageClass messageClass, MessageReceiver* messageReceiver)
{
- ASSERT(!m_globalMessageReceiverMap.contains(messageClass));
- m_globalMessageReceiverMap.set(messageClass, messageReceiver);
+ ASSERT(!m_globalMessageReceivers.contains(messageClass));
+ m_globalMessageReceivers.set(messageClass, messageReceiver);
}
-void MessageReceiverMap::clearAllMessageReceivers()
+void MessageReceiverMap::invalidate()
{
- m_globalMessageReceiverMap.clear();
+ m_globalMessageReceivers.clear();
}
bool MessageReceiverMap::knowsHowToHandleMessage(MessageID messageID) const
{
- return m_globalMessageReceiverMap.contains(messageID.messageClass());
+ return m_globalMessageReceivers.contains(messageID.messageClass());
}
bool MessageReceiverMap::dispatchMessage(Connection* connection, MessageID messageID, ArgumentDecoder* argumentDecoder)
{
- if (MessageReceiver* messageReceiver = m_globalMessageReceiverMap.get(messageID.messageClass())) {
+ if (MessageReceiver* messageReceiver = m_globalMessageReceivers.get(messageID.messageClass())) {
messageReceiver->didReceiveMessage(connection, messageID, argumentDecoder);
return true;
}
@@ -66,7 +66,7 @@
bool MessageReceiverMap::dispatchSyncMessage(Connection* connection, MessageID messageID, ArgumentDecoder* argumentDecoder, OwnPtr<ArgumentEncoder>& reply)
{
- if (MessageReceiver* messageReceiver = m_globalMessageReceiverMap.get(messageID.messageClass())) {
+ if (MessageReceiver* messageReceiver = m_globalMessageReceivers.get(messageID.messageClass())) {
messageReceiver->didReceiveSyncMessage(connection, messageID, argumentDecoder, reply);
return true;
}
Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.h (130971 => 130972)
--- trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.h 2012-10-10 22:31:08 UTC (rev 130971)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.h 2012-10-10 22:34:42 UTC (rev 130972)
@@ -43,7 +43,8 @@
~MessageReceiverMap();
void addMessageReceiver(MessageClass, MessageReceiver*);
- void clearAllMessageReceivers();
+
+ void invalidate();
bool knowsHowToHandleMessage(MessageID) const;
bool dispatchMessage(Connection*, MessageID, ArgumentDecoder*);
@@ -51,7 +52,7 @@
private:
// Message receivers that don't require a destination ID.
- HashMap<unsigned, MessageReceiver*> m_globalMessageReceiverMap;
+ HashMap<unsigned, MessageReceiver*> m_globalMessageReceivers;
};
};
Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (130971 => 130972)
--- trunk/Source/WebKit2/UIProcess/WebContext.cpp 2012-10-10 22:31:08 UTC (rev 130971)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp 2012-10-10 22:34:42 UTC (rev 130972)
@@ -127,7 +127,10 @@
#endif
, m_processTerminationEnabled(true)
{
-
+ addMessageReceiver(CoreIPC::MessageClassWebContext, this);
+ addMessageReceiver(CoreIPC::MessageClassDownloadProxy, this);
+ addMessageReceiver(CoreIPC::MessageClassWebContextLegacy, this);
+
// NOTE: These sub-objects must be initialized after m_messageReceiverMap..
m_applicationCacheManagerProxy = WebApplicationCacheManagerProxy::create(this);
#if ENABLE(BATTERY_STATUS)
@@ -178,7 +181,7 @@
removeLanguageChangeObserver(this);
- m_messageReceiverMap.clearAllMessageReceivers();
+ m_messageReceiverMap.invalidate();
m_applicationCacheManagerProxy->invalidate();
m_applicationCacheManagerProxy->clearContext();
@@ -738,29 +741,26 @@
m_messageReceiverMap.addMessageReceiver(messageClass, messageReceiver);
}
-bool WebContext::knowsHowToHandleMessage(CoreIPC::MessageID messageID) const
+bool WebContext::dispatchMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* argumentDecoder)
{
- if (m_messageReceiverMap.knowsHowToHandleMessage(messageID))
- return true;
+ return m_messageReceiverMap.dispatchMessage(connection, messageID, argumentDecoder);
+}
- return messageID.is<CoreIPC::MessageClassWebContext>()
- || messageID.is<CoreIPC::MessageClassWebContextLegacy>()
- || messageID.is<CoreIPC::MessageClassDownloadProxy>();
+bool WebContext::dispatchSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* argumentDecoder, OwnPtr<CoreIPC::ArgumentEncoder>& reply)
+{
+ return m_messageReceiverMap.dispatchSyncMessage(connection, messageID, argumentDecoder, reply);
}
-void WebContext::didReceiveMessage(WebProcessProxy* process, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
+void WebContext::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
{
- if (m_messageReceiverMap.dispatchMessage(process->connection(), messageID, arguments))
- return;
-
if (messageID.is<CoreIPC::MessageClassWebContext>()) {
- didReceiveWebContextMessage(process->connection(), messageID, arguments);
+ didReceiveWebContextMessage(connection, messageID, arguments);
return;
}
if (messageID.is<CoreIPC::MessageClassDownloadProxy>()) {
if (DownloadProxy* downloadProxy = m_downloads.get(arguments->destinationID()).get())
- downloadProxy->didReceiveDownloadProxyMessage(process->connection(), messageID, arguments);
+ downloadProxy->didReceiveDownloadProxyMessage(connection, messageID, arguments);
return;
}
@@ -769,7 +769,7 @@
case WebContextLegacyMessage::PostMessage: {
String messageName;
RefPtr<APIObject> messageBody;
- WebContextUserMessageDecoder messageDecoder(messageBody, process);
+ WebContextUserMessageDecoder messageDecoder(messageBody, WebProcessProxy::fromConnection(connection));
if (!arguments->decode(CoreIPC::Out(messageName, messageDecoder)))
return;
@@ -783,19 +783,19 @@
ASSERT_NOT_REACHED();
}
-void WebContext::didReceiveSyncMessage(WebProcessProxy* process, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, OwnPtr<CoreIPC::ArgumentEncoder>& reply)
+void WebContext::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, OwnPtr<CoreIPC::ArgumentEncoder>& reply)
{
- if (m_messageReceiverMap.dispatchSyncMessage(process->connection(), messageID, arguments, reply))
+ if (m_messageReceiverMap.dispatchSyncMessage(connection, messageID, arguments, reply))
return;
if (messageID.is<CoreIPC::MessageClassWebContext>()) {
- didReceiveSyncWebContextMessage(process->connection(), messageID, arguments, reply);
+ didReceiveSyncWebContextMessage(connection, messageID, arguments, reply);
return;
}
if (messageID.is<CoreIPC::MessageClassDownloadProxy>()) {
if (DownloadProxy* downloadProxy = m_downloads.get(arguments->destinationID()).get())
- downloadProxy->didReceiveSyncDownloadProxyMessage(process->connection(), messageID, arguments, reply);
+ downloadProxy->didReceiveSyncDownloadProxyMessage(connection, messageID, arguments, reply);
return;
}
@@ -805,7 +805,7 @@
String messageName;
RefPtr<APIObject> messageBody;
- WebContextUserMessageDecoder messageDecoder(messageBody, process);
+ WebContextUserMessageDecoder messageDecoder(messageBody, WebProcessProxy::fromConnection(connection));
if (!arguments->decode(CoreIPC::Out(messageName, messageDecoder)))
return;
Modified: trunk/Source/WebKit2/UIProcess/WebContext.h (130971 => 130972)
--- trunk/Source/WebKit2/UIProcess/WebContext.h 2012-10-10 22:31:08 UTC (rev 130971)
+++ trunk/Source/WebKit2/UIProcess/WebContext.h 2012-10-10 22:34:42 UTC (rev 130972)
@@ -77,7 +77,7 @@
typedef GenericCallback<WKDictionaryRef> DictionaryCallback;
-class WebContext : public APIObject {
+class WebContext : public APIObject, private CoreIPC::MessageReceiver {
public:
static const Type APIType = TypeContext;
@@ -87,7 +87,8 @@
static const Vector<WebContext*>& allContexts();
void addMessageReceiver(CoreIPC::MessageClass, CoreIPC::MessageReceiver*);
- bool knowsHowToHandleMessage(CoreIPC::MessageID) const;
+ bool dispatchMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
+ bool dispatchSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&);
void initializeInjectedBundleClient(const WKContextInjectedBundleClient*);
void initializeConnectionClient(const WKContextConnectionClient*);
@@ -145,8 +146,9 @@
void addVisitedLink(const String&);
void addVisitedLinkHash(WebCore::LinkHash);
- void didReceiveMessage(WebProcessProxy*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
- void didReceiveSyncMessage(WebProcessProxy*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&);
+ // MessageReceiver.
+ virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) OVERRIDE;
+ virtual void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&) OVERRIDE;
void setCacheModel(CacheModel);
CacheModel cacheModel() const { return m_cacheModel; }
Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (130971 => 130972)
--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp 2012-10-10 22:31:08 UTC (rev 130971)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp 2012-10-10 22:34:42 UTC (rev 130972)
@@ -102,6 +102,15 @@
}
}
+WebProcessProxy* WebProcessProxy::fromConnection(CoreIPC::Connection* connection)
+{
+ ASSERT(connection);
+ WebProcessProxy* webProcessProxy = static_cast<WebProcessProxy*>(connection->client());
+
+ ASSERT(webProcessProxy->connection() == connection);
+ return webProcessProxy;
+}
+
void WebProcessProxy::connect()
{
ASSERT(!m_processLauncher);
@@ -375,11 +384,8 @@
void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
{
- // FIXME: Come up with a better way to chain to the WebContext.
- if (m_context->knowsHowToHandleMessage(messageID)) {
- m_context->didReceiveMessage(this, messageID, arguments);
+ if (m_context->dispatchMessage(connection, messageID, arguments))
return;
- }
if (messageID.is<CoreIPC::MessageClassWebProcessProxy>()) {
didReceiveWebProcessProxyMessage(connection, messageID, arguments);
@@ -399,11 +405,8 @@
void WebProcessProxy::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, OwnPtr<CoreIPC::ArgumentEncoder>& reply)
{
- // FIXME: Come up with a better way to chain to the WebContext.
- if (m_context->knowsHowToHandleMessage(messageID)) {
- m_context->didReceiveSyncMessage(this, messageID, arguments, reply);
+ if (m_context->dispatchSyncMessage(connection, messageID, arguments, reply))
return;
- }
if (messageID.is<CoreIPC::MessageClassWebProcessProxy>()) {
didReceiveSyncWebProcessProxyMessage(connection, messageID, arguments, reply);
Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (130971 => 130972)
--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h 2012-10-10 22:31:08 UTC (rev 130971)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h 2012-10-10 22:34:42 UTC (rev 130972)
@@ -63,6 +63,8 @@
static PassRefPtr<WebProcessProxy> create(PassRefPtr<WebContext>);
~WebProcessProxy();
+ static WebProcessProxy* fromConnection(CoreIPC::Connection*);
+
void terminate();
template<typename T> bool send(const T& message, uint64_t destinationID, unsigned messageSendFlags = 0);