Title: [131283] trunk/Source/WebKit2
Revision
131283
Author
[email protected]
Date
2012-10-14 17:28:18 -0700 (Sun, 14 Oct 2012)

Log Message

Re-land of "WebContext should be a MessageReceiver"
https://bugs.webkit.org/show_bug.cgi?id=98958

Patch by Anders Carlsson <[email protected]> on 2012-10-14
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 (131282 => 131283)


--- trunk/Source/WebKit2/ChangeLog	2012-10-15 00:24:10 UTC (rev 131282)
+++ trunk/Source/WebKit2/ChangeLog	2012-10-15 00:28:18 UTC (rev 131283)
@@ -1,5 +1,43 @@
 2012-10-14  Anders Carlsson  <[email protected]>
 
+        Re-land of "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-14  Anders Carlsson  <[email protected]>
+
         WebPage::PostInjectedBundleMessage should be a variadic message
         https://bugs.webkit.org/show_bug.cgi?id=99277
 

Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.h (131282 => 131283)


--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.h	2012-10-15 00:24:10 UTC (rev 131282)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.h	2012-10-15 00:28:18 UTC (rev 131283)
@@ -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 (131282 => 131283)


--- trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.cpp	2012-10-15 00:24:10 UTC (rev 131282)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.cpp	2012-10-15 00:28:18 UTC (rev 131283)
@@ -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 (131282 => 131283)


--- trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.h	2012-10-15 00:24:10 UTC (rev 131282)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.h	2012-10-15 00:28:18 UTC (rev 131283)
@@ -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 (131282 => 131283)


--- trunk/Source/WebKit2/UIProcess/WebContext.cpp	2012-10-15 00:24:10 UTC (rev 131282)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp	2012-10-15 00:28:18 UTC (rev 131283)
@@ -129,7 +129,10 @@
     , m_usesNetworkProcess(false)
 #endif
 {
-    
+    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)
@@ -180,7 +183,7 @@
 
     removeLanguageChangeObserver(this);
 
-    m_messageReceiverMap.clearAllMessageReceivers();
+    m_messageReceiverMap.invalidate();
 
     m_applicationCacheManagerProxy->invalidate();
     m_applicationCacheManagerProxy->clearContext();
@@ -771,29 +774,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 messageID.is<CoreIPC::MessageClassWebContext>()
-        || messageID.is<CoreIPC::MessageClassWebContextLegacy>()
-        || messageID.is<CoreIPC::MessageClassDownloadProxy>();
+    return m_messageReceiverMap.dispatchMessage(connection, messageID, argumentDecoder);
 }
 
-void WebContext::didReceiveMessage(WebProcessProxy* process, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
+bool WebContext::dispatchSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* argumentDecoder, OwnPtr<CoreIPC::ArgumentEncoder>& reply)
 {
-    if (m_messageReceiverMap.dispatchMessage(process->connection(), messageID, arguments))
-        return;
+    return m_messageReceiverMap.dispatchSyncMessage(connection, messageID, argumentDecoder, reply);
+}
 
+void WebContext::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
+{
     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;
     }
@@ -802,7 +802,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;
 
@@ -816,19 +816,16 @@
     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))
-        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;
     }
 
@@ -838,7 +835,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 (131282 => 131283)


--- trunk/Source/WebKit2/UIProcess/WebContext.h	2012-10-15 00:24:10 UTC (rev 131282)
+++ trunk/Source/WebKit2/UIProcess/WebContext.h	2012-10-15 00:28:18 UTC (rev 131283)
@@ -81,7 +81,7 @@
     
 typedef GenericCallback<WKDictionaryRef> DictionaryCallback;
 
-class WebContext : public APIObject {
+class WebContext : public APIObject, private CoreIPC::MessageReceiver {
 public:
     static const Type APIType = TypeContext;
 
@@ -91,7 +91,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*);
@@ -149,8 +150,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 (131282 => 131283)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2012-10-15 00:24:10 UTC (rev 131282)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2012-10-15 00:28:18 UTC (rev 131283)
@@ -105,6 +105,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);
@@ -382,11 +391,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);
@@ -406,11 +412,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 (131282 => 131283)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2012-10-15 00:24:10 UTC (rev 131282)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2012-10-15 00:28:18 UTC (rev 131283)
@@ -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
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to