Title: [130972] trunk/Source/WebKit2
Revision
130972
Author
ander...@apple.com
Date
2012-10-10 15:34:42 -0700 (Wed, 10 Oct 2012)

Log Message

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):

Modified Paths

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);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to