Title: [132386] trunk/Source/WebKit2
Revision
132386
Author
[email protected]
Date
2012-10-24 12:31:16 -0700 (Wed, 24 Oct 2012)

Log Message

Add per destination ID message receivers
https://bugs.webkit.org/show_bug.cgi?id=100276

Reviewed by Andreas Kling.

Extend MessageReceiverMap to handle adding message receivers for a given destinationID/receiver name pair.
Use this to make every WebPage object a message receiver.

* Platform/CoreIPC/MessageReceiverMap.cpp:
(CoreIPC::MessageReceiverMap::addMessageReceiver):
(CoreIPC):
(CoreIPC::MessageReceiverMap::removeMessageReceiver):
(CoreIPC::MessageReceiverMap::invalidate):
(CoreIPC::MessageReceiverMap::dispatchMessage):
(CoreIPC::MessageReceiverMap::dispatchSyncMessage):
* Platform/CoreIPC/MessageReceiverMap.h:
(MessageReceiverMap):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::WebPage):
(WebKit::WebPage::~WebPage):
* WebProcess/WebPage/WebPage.h:
(WebPage):
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::addMessageReceiver):
(WebKit):
(WebKit::WebProcess::removeMessageReceiver):
(WebKit::WebProcess::didReceiveSyncMessage):
(WebKit::WebProcess::didReceiveMessage):
* WebProcess/WebProcess.h:
(WebProcess):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (132385 => 132386)


--- trunk/Source/WebKit2/ChangeLog	2012-10-24 19:31:09 UTC (rev 132385)
+++ trunk/Source/WebKit2/ChangeLog	2012-10-24 19:31:16 UTC (rev 132386)
@@ -1,3 +1,36 @@
+2012-10-24  Anders Carlsson  <[email protected]>
+
+        Add per destination ID message receivers
+        https://bugs.webkit.org/show_bug.cgi?id=100276
+
+        Reviewed by Andreas Kling.
+
+        Extend MessageReceiverMap to handle adding message receivers for a given destinationID/receiver name pair.
+        Use this to make every WebPage object a message receiver.
+
+        * Platform/CoreIPC/MessageReceiverMap.cpp:
+        (CoreIPC::MessageReceiverMap::addMessageReceiver):
+        (CoreIPC):
+        (CoreIPC::MessageReceiverMap::removeMessageReceiver):
+        (CoreIPC::MessageReceiverMap::invalidate):
+        (CoreIPC::MessageReceiverMap::dispatchMessage):
+        (CoreIPC::MessageReceiverMap::dispatchSyncMessage):
+        * Platform/CoreIPC/MessageReceiverMap.h:
+        (MessageReceiverMap):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::WebPage):
+        (WebKit::WebPage::~WebPage):
+        * WebProcess/WebPage/WebPage.h:
+        (WebPage):
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::addMessageReceiver):
+        (WebKit):
+        (WebKit::WebProcess::removeMessageReceiver):
+        (WebKit::WebProcess::didReceiveSyncMessage):
+        (WebKit::WebProcess::didReceiveMessage):
+        * WebProcess/WebProcess.h:
+        (WebProcess):
+
 2012-10-24  Timothy Hatcher  <[email protected]>
 
         Make the Inspector WKView/WebView become the first responder when bringToFront is called.

Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.cpp (132385 => 132386)


--- trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.cpp	2012-10-24 19:31:09 UTC (rev 132385)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.cpp	2012-10-24 19:31:16 UTC (rev 132386)
@@ -45,28 +45,65 @@
     m_globalMessageReceivers.set(messageReceiverName, messageReceiver);
 }
 
+void MessageReceiverMap::addMessageReceiver(StringReference messageReceiverName, uint64_t destinationID, MessageReceiver* messageReceiver)
+{
+    ASSERT(!m_messageReceivers.contains(std::make_pair(messageReceiverName, destinationID)));
+    ASSERT(!m_globalMessageReceivers.contains(messageReceiverName));
+
+    m_messageReceivers.set(std::make_pair(messageReceiverName, destinationID), messageReceiver);
+}
+
+void MessageReceiverMap::removeMessageReceiver(StringReference messageReceiverName)
+{
+    ASSERT(m_globalMessageReceivers.contains(messageReceiverName));
+
+    m_globalMessageReceivers.remove(messageReceiverName);
+}
+
+void MessageReceiverMap::removeMessageReceiver(StringReference messageReceiverName, uint64_t destinationID)
+{
+    ASSERT(m_messageReceivers.contains(std::make_pair(messageReceiverName, destinationID)));
+
+    m_messageReceivers.remove(std::make_pair(messageReceiverName, destinationID));
+}
+
 void MessageReceiverMap::invalidate()
 {
     m_globalMessageReceivers.clear();
+    m_messageReceivers.clear();
 }
 
 bool MessageReceiverMap::dispatchMessage(Connection* connection, MessageID messageID, MessageDecoder& decoder)
 {
     if (MessageReceiver* messageReceiver = m_globalMessageReceivers.get(decoder.messageReceiverName())) {
+        ASSERT(!decoder.destinationID());
+
         messageReceiver->didReceiveMessage(connection, messageID, decoder);
         return true;
     }
 
+    if (MessageReceiver* messageReceiver = m_messageReceivers.get(std::make_pair(decoder.messageReceiverName(), decoder.destinationID()))) {
+        messageReceiver->didReceiveMessage(connection, messageID, decoder);
+        return true;
+    }
+
     return false;
 }
 
 bool MessageReceiverMap::dispatchSyncMessage(Connection* connection, MessageID messageID, MessageDecoder& decoder, OwnPtr<MessageEncoder>& replyEncoder)
 {
     if (MessageReceiver* messageReceiver = m_globalMessageReceivers.get(decoder.messageReceiverName())) {
+        ASSERT(!decoder.destinationID());
+
         messageReceiver->didReceiveSyncMessage(connection, messageID, decoder, replyEncoder);
         return true;
     }
 
+    if (MessageReceiver* messageReceiver = m_messageReceivers.get(std::make_pair(decoder.messageReceiverName(), decoder.destinationID()))) {
+        messageReceiver->didReceiveSyncMessage(connection, messageID, decoder, replyEncoder);
+        return true;
+    }
+
     return false;
 }
 

Modified: trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.h (132385 => 132386)


--- trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.h	2012-10-24 19:31:09 UTC (rev 132385)
+++ trunk/Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.h	2012-10-24 19:31:16 UTC (rev 132386)
@@ -44,7 +44,11 @@
     ~MessageReceiverMap();
 
     void addMessageReceiver(StringReference messageReceiverName, MessageReceiver*);
+    void addMessageReceiver(StringReference messageReceiverName, uint64_t destinationID, MessageReceiver*);
 
+    void removeMessageReceiver(StringReference messageReceiverName);
+    void removeMessageReceiver(StringReference messageReceiverName, uint64_t destinationID);
+
     void invalidate();
 
     bool dispatchMessage(Connection*, MessageID, MessageDecoder&);
@@ -53,6 +57,8 @@
 private:
     // Message receivers that don't require a destination ID.
     HashMap<StringReference, MessageReceiver*> m_globalMessageReceivers;
+
+    HashMap<std::pair<StringReference, uint64_t>, MessageReceiver*> m_messageReceivers;
 };
 
 };

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (132385 => 132386)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2012-10-24 19:31:09 UTC (rev 132385)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2012-10-24 19:31:16 UTC (rev 132386)
@@ -31,6 +31,7 @@
 #include "DataReference.h"
 #include "DecoderAdapter.h"
 #include "DrawingArea.h"
+#include "DrawingAreaMessages.h"
 #include "InjectedBundle.h"
 #include "InjectedBundleBackForwardList.h"
 #include "InjectedBundleUserMessageCoders.h"
@@ -60,15 +61,18 @@
 #include "WebEventConversion.h"
 #include "WebFrame.h"
 #include "WebFullScreenManager.h"
+#include "WebFullScreenManagerMessages.h"
 #include "WebGeolocationClient.h"
 #include "WebGeometry.h"
 #include "WebImage.h"
 #include "WebInspector.h"
 #include "WebInspectorClient.h"
+#include "WebInspectorMessages.h"
 #include "WebNotificationClient.h"
 #include "WebOpenPanelResultListener.h"
 #include "WebPageCreationParameters.h"
 #include "WebPageGroupProxy.h"
+#include "WebPageMessages.h"
 #include "WebPageProxyMessages.h"
 #include "WebPopupMenu.h"
 #include "WebPreferencesStore.h"
@@ -176,6 +180,10 @@
 #include <wtf/RefCountedLeakCounter.h>
 #endif
 
+#if USE(COORDINATED_GRAPHICS)
+#include "LayerTreeCoordinatorMessages.h"
+#endif
+
 using namespace JSC;
 using namespace WebCore;
 using namespace std;
@@ -355,6 +363,20 @@
     
     setMediaVolume(parameters.mediaVolume);
 
+    WebProcess::shared().addMessageReceiver(Messages::WebPage::messageReceiverName(), m_pageID, this);
+
+    // FIXME: This should be done in the object constructors, and the objects themselves should be message receivers.
+    WebProcess::shared().addMessageReceiver(Messages::DrawingArea::messageReceiverName(), m_pageID, this);
+#if USE(COORDINATED_GRAPHICS)
+    WebProcess::shared().addMessageReceiver(Messages::LayerTreeCoordinator::messageReceiverName(), m_pageID, this);
+#endif
+#if ENABLE(INSPECTOR)
+    WebProcess::shared().addMessageReceiver(Messages::WebInspector::messageReceiverName(), m_pageID, this);
+#endif
+#if ENABLE(FULLSCREEN_API)
+    WebProcess::shared().addMessageReceiver(Messages::WebFullScreenManager::messageReceiverName(), m_pageID, this);
+#endif
+
 #ifndef NDEBUG
     webPageCounter.increment();
 #endif
@@ -372,6 +394,20 @@
     for (HashSet<PluginView*>::const_iterator it = m_pluginViews.begin(), end = m_pluginViews.end(); it != end; ++it)
         (*it)->webPageDestroyed();
 
+    WebProcess::shared().removeMessageReceiver(Messages::WebPage::messageReceiverName(), m_pageID);
+
+    // FIXME: This should be done in the object destructors, and the objects themselves should be message receivers.
+    WebProcess::shared().removeMessageReceiver(Messages::DrawingArea::messageReceiverName(), m_pageID);
+#if USE(COORDINATED_GRAPHICS)
+    WebProcess::shared().removeMessageReceiver(Messages::LayerTreeCoordinator::messageReceiverName(), m_pageID);
+#endif
+#if ENABLE(INSPECTOR)
+    WebProcess::shared().removeMessageReceiver(Messages::WebInspector::messageReceiverName(), m_pageID);
+#endif
+#if ENABLE(FULLSCREEN_API)
+    WebProcess::shared().removeMessageReceiver(Messages::WebFullScreenManager::messageReceiverName(), m_pageID);
+#endif
+
 #ifndef NDEBUG
     webPageCounter.decrement();
 #endif

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (132385 => 132386)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2012-10-24 19:31:09 UTC (rev 132385)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h	2012-10-24 19:31:16 UTC (rev 132386)
@@ -43,6 +43,7 @@
 #include "InjectedBundlePagePolicyClient.h"
 #include "InjectedBundlePageResourceLoadClient.h"
 #include "InjectedBundlePageUIClient.h"
+#include "MessageReceiver.h"
 #include "MessageSender.h"
 #include "TapHighlightController.h"
 #include "Plugin.h"
@@ -162,7 +163,7 @@
 class WebTouchEvent;
 #endif
 
-class WebPage : public APIObject, public CoreIPC::MessageSender<WebPage> {
+class WebPage : public APIObject, public CoreIPC::MessageReceiver, public CoreIPC::MessageSender<WebPage> {
 public:
     static const Type APIType = TypeBundlePage;
 
@@ -238,9 +239,8 @@
     WebOpenPanelResultListener* activeOpenPanelResultListener() const { return m_activeOpenPanelResultListener.get(); }
     void setActiveOpenPanelResultListener(PassRefPtr<WebOpenPanelResultListener>);
 
-    // -- Called from WebProcess.
-    void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&);
-    void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&, OwnPtr<CoreIPC::MessageEncoder>&);
+    void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&) OVERRIDE;
+    void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&, OwnPtr<CoreIPC::MessageEncoder>&) OVERRIDE;
 
     // -- InjectedBundle methods
 #if ENABLE(CONTEXT_MENUS)

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (132385 => 132386)


--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2012-10-24 19:31:09 UTC (rev 132385)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2012-10-24 19:31:16 UTC (rev 132386)
@@ -199,6 +199,16 @@
     m_messageReceiverMap.addMessageReceiver(messageReceiverName, messageReceiver);
 }
 
+void WebProcess::addMessageReceiver(CoreIPC::StringReference messageReceiverName, uint64_t destinationID, CoreIPC::MessageReceiver* messageReceiver)
+{
+    m_messageReceiverMap.addMessageReceiver(messageReceiverName, destinationID, messageReceiver);
+}
+
+void WebProcess::removeMessageReceiver(CoreIPC::StringReference messageReceiverName, uint64_t destinationID)
+{
+    m_messageReceiverMap.removeMessageReceiver(messageReceiverName, destinationID);
+}
+
 void WebProcess::initializeWebProcess(const WebProcessCreationParameters& parameters, CoreIPC::MessageDecoder& decoder)
 {
     ASSERT(m_pageMap.isEmpty());
@@ -651,18 +661,8 @@
 
 void WebProcess::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder, OwnPtr<CoreIPC::MessageEncoder>& replyEncoder)
 {
-    if (m_messageReceiverMap.dispatchSyncMessage(connection, messageID, decoder, replyEncoder))
+    m_messageReceiverMap.dispatchSyncMessage(connection, messageID, decoder, replyEncoder);
         return;
-
-    uint64_t pageID = decoder.destinationID();
-    if (!pageID)
-        return;
-    
-    WebPage* page = webPage(pageID);
-    if (!page)
-        return;
-    
-    page->didReceiveSyncMessage(connection, messageID, decoder, replyEncoder);
 }
 
 void WebProcess::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder)
@@ -718,16 +718,6 @@
         
         pageGroupProxy->didReceiveMessage(connection, messageID, decoder);
     }
-
-    uint64_t pageID = decoder.destinationID();
-    if (!pageID)
-        return;
-    
-    WebPage* page = webPage(pageID);
-    if (!page)
-        return;
-    
-    page->didReceiveMessage(connection, messageID, decoder);
 }
 
 void WebProcess::didClose(CoreIPC::Connection*)

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.h (132385 => 132386)


--- trunk/Source/WebKit2/WebProcess/WebProcess.h	2012-10-24 19:31:09 UTC (rev 132385)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.h	2012-10-24 19:31:16 UTC (rev 132386)
@@ -115,7 +115,10 @@
     WebCore::RunLoop* runLoop() const { return m_runLoop; }
 
     void addMessageReceiver(CoreIPC::StringReference messageReceiverName, CoreIPC::MessageReceiver*);
+    void addMessageReceiver(CoreIPC::StringReference messageReceiverName, uint64_t destinationID, CoreIPC::MessageReceiver*);
 
+    void removeMessageReceiver(CoreIPC::StringReference messageReceiverName, uint64_t destinationID);
+
     WebConnectionToUIProcess* webConnectionToUIProcess() const { return m_connection.get(); }
 
     WebPage* webPage(uint64_t pageID) const;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to