Skip to content

Commit 115bc84

Browse files
author
Anders Carlsson
committed
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): Canonical link: https://commits.webkit.org/116944@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@130972 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent 9d38781 commit 115bc84

8 files changed

Lines changed: 89 additions & 41 deletions

File tree

Source/WebKit2/ChangeLog

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
1+
2012-10-10 Anders Carlsson <andersca@apple.com>
2+
3+
WebContext should be a MessageReceiver
4+
https://bugs.webkit.org/show_bug.cgi?id=98958
5+
6+
Reviewed by Sam Weinig.
7+
8+
Make WebContext be a MessageReceiver that lives in its own map. This allows us to get rid of the
9+
knowsHowToHandleMessage functions on MessageReceiverMap and WebContext.
10+
11+
* Platform/CoreIPC/Connection.h:
12+
(CoreIPC::Connection::client):
13+
(Connection):
14+
* Platform/CoreIPC/MessageReceiverMap.cpp:
15+
(CoreIPC::MessageReceiverMap::addMessageReceiver):
16+
(CoreIPC::MessageReceiverMap::invalidate):
17+
(CoreIPC::MessageReceiverMap::knowsHowToHandleMessage):
18+
(CoreIPC::MessageReceiverMap::dispatchMessage):
19+
(CoreIPC::MessageReceiverMap::dispatchSyncMessage):
20+
* Platform/CoreIPC/MessageReceiverMap.h:
21+
(MessageReceiverMap):
22+
* UIProcess/WebContext.cpp:
23+
(WebKit::WebContext::WebContext):
24+
(WebKit::WebContext::~WebContext):
25+
(WebKit::WebContext::dispatchMessage):
26+
(WebKit::WebContext::dispatchSyncMessage):
27+
(WebKit::WebContext::didReceiveMessage):
28+
(WebKit::WebContext::didReceiveSyncMessage):
29+
* UIProcess/WebContext.h:
30+
(WebContext):
31+
* UIProcess/WebProcessProxy.cpp:
32+
(WebKit::WebProcessProxy::fromConnection):
33+
(WebKit):
34+
(WebKit::WebProcessProxy::didReceiveMessage):
35+
(WebKit::WebProcessProxy::didReceiveSyncMessage):
36+
* UIProcess/WebProcessProxy.h:
37+
(WebProcessProxy):
38+
139
2012-10-10 Sam Weinig <sam@webkit.org>
240

341
Add skeleton of a WebKit2 ObjC DOM SPI (not intended to be the full DOM)

Source/WebKit2/Platform/CoreIPC/Connection.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ class Connection : public ThreadSafeRefCounted<Connection> {
151151
static PassRefPtr<Connection> createClientConnection(Identifier, Client*, WebCore::RunLoop* clientRunLoop);
152152
~Connection();
153153

154+
Client* client() const { return m_client; }
155+
154156
#if OS(DARWIN)
155157
void setShouldCloseConnectionOnMachExceptions();
156158
#elif PLATFORM(QT)

Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,23 +40,23 @@ MessageReceiverMap::~MessageReceiverMap()
4040

4141
void MessageReceiverMap::addMessageReceiver(MessageClass messageClass, MessageReceiver* messageReceiver)
4242
{
43-
ASSERT(!m_globalMessageReceiverMap.contains(messageClass));
44-
m_globalMessageReceiverMap.set(messageClass, messageReceiver);
43+
ASSERT(!m_globalMessageReceivers.contains(messageClass));
44+
m_globalMessageReceivers.set(messageClass, messageReceiver);
4545
}
4646

47-
void MessageReceiverMap::clearAllMessageReceivers()
47+
void MessageReceiverMap::invalidate()
4848
{
49-
m_globalMessageReceiverMap.clear();
49+
m_globalMessageReceivers.clear();
5050
}
5151

5252
bool MessageReceiverMap::knowsHowToHandleMessage(MessageID messageID) const
5353
{
54-
return m_globalMessageReceiverMap.contains(messageID.messageClass());
54+
return m_globalMessageReceivers.contains(messageID.messageClass());
5555
}
5656

5757
bool MessageReceiverMap::dispatchMessage(Connection* connection, MessageID messageID, ArgumentDecoder* argumentDecoder)
5858
{
59-
if (MessageReceiver* messageReceiver = m_globalMessageReceiverMap.get(messageID.messageClass())) {
59+
if (MessageReceiver* messageReceiver = m_globalMessageReceivers.get(messageID.messageClass())) {
6060
messageReceiver->didReceiveMessage(connection, messageID, argumentDecoder);
6161
return true;
6262
}
@@ -66,7 +66,7 @@ bool MessageReceiverMap::dispatchMessage(Connection* connection, MessageID messa
6666

6767
bool MessageReceiverMap::dispatchSyncMessage(Connection* connection, MessageID messageID, ArgumentDecoder* argumentDecoder, OwnPtr<ArgumentEncoder>& reply)
6868
{
69-
if (MessageReceiver* messageReceiver = m_globalMessageReceiverMap.get(messageID.messageClass())) {
69+
if (MessageReceiver* messageReceiver = m_globalMessageReceivers.get(messageID.messageClass())) {
7070
messageReceiver->didReceiveSyncMessage(connection, messageID, argumentDecoder, reply);
7171
return true;
7272
}

Source/WebKit2/Platform/CoreIPC/MessageReceiverMap.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,16 @@ class MessageReceiverMap {
4343
~MessageReceiverMap();
4444

4545
void addMessageReceiver(MessageClass, MessageReceiver*);
46-
void clearAllMessageReceivers();
46+
47+
void invalidate();
4748
bool knowsHowToHandleMessage(MessageID) const;
4849

4950
bool dispatchMessage(Connection*, MessageID, ArgumentDecoder*);
5051
bool dispatchSyncMessage(Connection*, MessageID, ArgumentDecoder*, OwnPtr<ArgumentEncoder>&);
5152

5253
private:
5354
// Message receivers that don't require a destination ID.
54-
HashMap<unsigned, MessageReceiver*> m_globalMessageReceiverMap;
55+
HashMap<unsigned, MessageReceiver*> m_globalMessageReceivers;
5556
};
5657

5758
};

Source/WebKit2/UIProcess/WebContext.cpp

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,10 @@ WebContext::WebContext(ProcessModel processModel, const String& injectedBundlePa
127127
#endif
128128
, m_processTerminationEnabled(true)
129129
{
130-
130+
addMessageReceiver(CoreIPC::MessageClassWebContext, this);
131+
addMessageReceiver(CoreIPC::MessageClassDownloadProxy, this);
132+
addMessageReceiver(CoreIPC::MessageClassWebContextLegacy, this);
133+
131134
// NOTE: These sub-objects must be initialized after m_messageReceiverMap..
132135
m_applicationCacheManagerProxy = WebApplicationCacheManagerProxy::create(this);
133136
#if ENABLE(BATTERY_STATUS)
@@ -178,7 +181,7 @@ WebContext::~WebContext()
178181

179182
removeLanguageChangeObserver(this);
180183

181-
m_messageReceiverMap.clearAllMessageReceivers();
184+
m_messageReceiverMap.invalidate();
182185

183186
m_applicationCacheManagerProxy->invalidate();
184187
m_applicationCacheManagerProxy->clearContext();
@@ -738,29 +741,26 @@ void WebContext::addMessageReceiver(CoreIPC::MessageClass messageClass, CoreIPC:
738741
m_messageReceiverMap.addMessageReceiver(messageClass, messageReceiver);
739742
}
740743

741-
bool WebContext::knowsHowToHandleMessage(CoreIPC::MessageID messageID) const
744+
bool WebContext::dispatchMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* argumentDecoder)
742745
{
743-
if (m_messageReceiverMap.knowsHowToHandleMessage(messageID))
744-
return true;
745-
746-
return messageID.is<CoreIPC::MessageClassWebContext>()
747-
|| messageID.is<CoreIPC::MessageClassWebContextLegacy>()
748-
|| messageID.is<CoreIPC::MessageClassDownloadProxy>();
746+
return m_messageReceiverMap.dispatchMessage(connection, messageID, argumentDecoder);
749747
}
750748

751-
void WebContext::didReceiveMessage(WebProcessProxy* process, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
749+
bool WebContext::dispatchSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* argumentDecoder, OwnPtr<CoreIPC::ArgumentEncoder>& reply)
752750
{
753-
if (m_messageReceiverMap.dispatchMessage(process->connection(), messageID, arguments))
754-
return;
751+
return m_messageReceiverMap.dispatchSyncMessage(connection, messageID, argumentDecoder, reply);
752+
}
755753

754+
void WebContext::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
755+
{
756756
if (messageID.is<CoreIPC::MessageClassWebContext>()) {
757-
didReceiveWebContextMessage(process->connection(), messageID, arguments);
757+
didReceiveWebContextMessage(connection, messageID, arguments);
758758
return;
759759
}
760760

761761
if (messageID.is<CoreIPC::MessageClassDownloadProxy>()) {
762762
if (DownloadProxy* downloadProxy = m_downloads.get(arguments->destinationID()).get())
763-
downloadProxy->didReceiveDownloadProxyMessage(process->connection(), messageID, arguments);
763+
downloadProxy->didReceiveDownloadProxyMessage(connection, messageID, arguments);
764764

765765
return;
766766
}
@@ -769,7 +769,7 @@ void WebContext::didReceiveMessage(WebProcessProxy* process, CoreIPC::MessageID
769769
case WebContextLegacyMessage::PostMessage: {
770770
String messageName;
771771
RefPtr<APIObject> messageBody;
772-
WebContextUserMessageDecoder messageDecoder(messageBody, process);
772+
WebContextUserMessageDecoder messageDecoder(messageBody, WebProcessProxy::fromConnection(connection));
773773
if (!arguments->decode(CoreIPC::Out(messageName, messageDecoder)))
774774
return;
775775

@@ -783,19 +783,19 @@ void WebContext::didReceiveMessage(WebProcessProxy* process, CoreIPC::MessageID
783783
ASSERT_NOT_REACHED();
784784
}
785785

786-
void WebContext::didReceiveSyncMessage(WebProcessProxy* process, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, OwnPtr<CoreIPC::ArgumentEncoder>& reply)
786+
void WebContext::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, OwnPtr<CoreIPC::ArgumentEncoder>& reply)
787787
{
788-
if (m_messageReceiverMap.dispatchSyncMessage(process->connection(), messageID, arguments, reply))
788+
if (m_messageReceiverMap.dispatchSyncMessage(connection, messageID, arguments, reply))
789789
return;
790790

791791
if (messageID.is<CoreIPC::MessageClassWebContext>()) {
792-
didReceiveSyncWebContextMessage(process->connection(), messageID, arguments, reply);
792+
didReceiveSyncWebContextMessage(connection, messageID, arguments, reply);
793793
return;
794794
}
795795

796796
if (messageID.is<CoreIPC::MessageClassDownloadProxy>()) {
797797
if (DownloadProxy* downloadProxy = m_downloads.get(arguments->destinationID()).get())
798-
downloadProxy->didReceiveSyncDownloadProxyMessage(process->connection(), messageID, arguments, reply);
798+
downloadProxy->didReceiveSyncDownloadProxyMessage(connection, messageID, arguments, reply);
799799
return;
800800
}
801801

@@ -805,7 +805,7 @@ void WebContext::didReceiveSyncMessage(WebProcessProxy* process, CoreIPC::Messag
805805

806806
String messageName;
807807
RefPtr<APIObject> messageBody;
808-
WebContextUserMessageDecoder messageDecoder(messageBody, process);
808+
WebContextUserMessageDecoder messageDecoder(messageBody, WebProcessProxy::fromConnection(connection));
809809
if (!arguments->decode(CoreIPC::Out(messageName, messageDecoder)))
810810
return;
811811

Source/WebKit2/UIProcess/WebContext.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ struct WebProcessCreationParameters;
7777

7878
typedef GenericCallback<WKDictionaryRef> DictionaryCallback;
7979

80-
class WebContext : public APIObject {
80+
class WebContext : public APIObject, private CoreIPC::MessageReceiver {
8181
public:
8282
static const Type APIType = TypeContext;
8383

@@ -87,7 +87,8 @@ class WebContext : public APIObject {
8787
static const Vector<WebContext*>& allContexts();
8888

8989
void addMessageReceiver(CoreIPC::MessageClass, CoreIPC::MessageReceiver*);
90-
bool knowsHowToHandleMessage(CoreIPC::MessageID) const;
90+
bool dispatchMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
91+
bool dispatchSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&);
9192

9293
void initializeInjectedBundleClient(const WKContextInjectedBundleClient*);
9394
void initializeConnectionClient(const WKContextConnectionClient*);
@@ -145,8 +146,9 @@ class WebContext : public APIObject {
145146
void addVisitedLink(const String&);
146147
void addVisitedLinkHash(WebCore::LinkHash);
147148

148-
void didReceiveMessage(WebProcessProxy*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
149-
void didReceiveSyncMessage(WebProcessProxy*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&);
149+
// MessageReceiver.
150+
virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) OVERRIDE;
151+
virtual void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&) OVERRIDE;
150152

151153
void setCacheModel(CacheModel);
152154
CacheModel cacheModel() const { return m_cacheModel; }

Source/WebKit2/UIProcess/WebProcessProxy.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,15 @@ WebProcessProxy::~WebProcessProxy()
102102
}
103103
}
104104

105+
WebProcessProxy* WebProcessProxy::fromConnection(CoreIPC::Connection* connection)
106+
{
107+
ASSERT(connection);
108+
WebProcessProxy* webProcessProxy = static_cast<WebProcessProxy*>(connection->client());
109+
110+
ASSERT(webProcessProxy->connection() == connection);
111+
return webProcessProxy;
112+
}
113+
105114
void WebProcessProxy::connect()
106115
{
107116
ASSERT(!m_processLauncher);
@@ -375,11 +384,8 @@ void WebProcessProxy::didClearPluginSiteData(uint64_t callbackID)
375384

376385
void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
377386
{
378-
// FIXME: Come up with a better way to chain to the WebContext.
379-
if (m_context->knowsHowToHandleMessage(messageID)) {
380-
m_context->didReceiveMessage(this, messageID, arguments);
387+
if (m_context->dispatchMessage(connection, messageID, arguments))
381388
return;
382-
}
383389

384390
if (messageID.is<CoreIPC::MessageClassWebProcessProxy>()) {
385391
didReceiveWebProcessProxyMessage(connection, messageID, arguments);
@@ -399,11 +405,8 @@ void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC
399405

400406
void WebProcessProxy::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, OwnPtr<CoreIPC::ArgumentEncoder>& reply)
401407
{
402-
// FIXME: Come up with a better way to chain to the WebContext.
403-
if (m_context->knowsHowToHandleMessage(messageID)) {
404-
m_context->didReceiveSyncMessage(this, messageID, arguments, reply);
408+
if (m_context->dispatchSyncMessage(connection, messageID, arguments, reply))
405409
return;
406-
}
407410

408411
if (messageID.is<CoreIPC::MessageClassWebProcessProxy>()) {
409412
didReceiveSyncWebProcessProxyMessage(connection, messageID, arguments, reply);

Source/WebKit2/UIProcess/WebProcessProxy.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ class WebProcessProxy : public ThreadSafeRefCounted<WebProcessProxy>, CoreIPC::C
6363
static PassRefPtr<WebProcessProxy> create(PassRefPtr<WebContext>);
6464
~WebProcessProxy();
6565

66+
static WebProcessProxy* fromConnection(CoreIPC::Connection*);
67+
6668
void terminate();
6769

6870
template<typename T> bool send(const T& message, uint64_t destinationID, unsigned messageSendFlags = 0);

0 commit comments

Comments
 (0)