Title: [226343] trunk/Source/WebCore
- Revision
- 226343
- Author
- beid...@apple.com
- Date
- 2018-01-02 16:51:01 -0800 (Tue, 02 Jan 2018)
Log Message
Make MessagePortChannel::takeAllMessagesFromRemote asynchronous.
https://bugs.webkit.org/show_bug.cgi?id=181205
Reviewed by Alex Christensen.
No new tests (No behavior change)
This is needed for the ongoing WK2 MessagePort work.
For WK1 in-process MessagePorts it is still synchronous; no behavior change.
* dom/InProcessMessagePortChannel.cpp:
(WebCore::InProcessMessagePortChannel::takeAllMessagesFromRemote):
* dom/InProcessMessagePortChannel.h:
* dom/MessagePort.cpp:
(WebCore::MessagePort::dispatchMessages):
* dom/MessagePortChannel.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (226342 => 226343)
--- trunk/Source/WebCore/ChangeLog 2018-01-03 00:20:48 UTC (rev 226342)
+++ trunk/Source/WebCore/ChangeLog 2018-01-03 00:51:01 UTC (rev 226343)
@@ -1,3 +1,24 @@
+2018-01-02 Brady Eidson <beid...@apple.com>
+
+ Make MessagePortChannel::takeAllMessagesFromRemote asynchronous.
+ https://bugs.webkit.org/show_bug.cgi?id=181205
+
+ Reviewed by Alex Christensen.
+
+ No new tests (No behavior change)
+
+ This is needed for the ongoing WK2 MessagePort work.
+
+ For WK1 in-process MessagePorts it is still synchronous; no behavior change.
+
+ * dom/InProcessMessagePortChannel.cpp:
+ (WebCore::InProcessMessagePortChannel::takeAllMessagesFromRemote):
+ * dom/InProcessMessagePortChannel.h:
+
+ * dom/MessagePort.cpp:
+ (WebCore::MessagePort::dispatchMessages):
+ * dom/MessagePortChannel.h:
+
2018-01-02 Jiewen Tan <jiewen_...@apple.com>
Add a WebAuthentication runtime feature flag
Modified: trunk/Source/WebCore/dom/InProcessMessagePortChannel.cpp (226342 => 226343)
--- trunk/Source/WebCore/dom/InProcessMessagePortChannel.cpp 2018-01-03 00:20:48 UTC (rev 226342)
+++ trunk/Source/WebCore/dom/InProcessMessagePortChannel.cpp 2018-01-03 00:51:01 UTC (rev 226343)
@@ -27,6 +27,7 @@
#include "InProcessMessagePortChannel.h"
#include "MessagePort.h"
+#include <wtf/CompletionHandler.h>
#include <wtf/Locker.h>
namespace WebCore {
@@ -75,10 +76,15 @@
m_remotePort->messageAvailable();
}
-Deque<std::unique_ptr<MessagePortChannel::EventData>> InProcessMessagePortChannel::takeAllMessagesFromRemote()
+void InProcessMessagePortChannel::takeAllMessagesFromRemote(CompletionHandler<void(Deque<std::unique_ptr<EventData>>&&)>&& callback)
{
- Locker<Lock> locker(m_lock);
- return m_incomingQueue->takeAllMessages();
+ Deque<std::unique_ptr<EventData>> messages;
+ {
+ Locker<Lock> locker(m_lock);
+ messages = m_incomingQueue->takeAllMessages();
+ }
+
+ callback(WTFMove(messages));
}
bool InProcessMessagePortChannel::isConnectedTo(const MessagePortIdentifier& identifier)
Modified: trunk/Source/WebCore/dom/InProcessMessagePortChannel.h (226342 => 226343)
--- trunk/Source/WebCore/dom/InProcessMessagePortChannel.h 2018-01-03 00:20:48 UTC (rev 226342)
+++ trunk/Source/WebCore/dom/InProcessMessagePortChannel.h 2018-01-03 00:51:01 UTC (rev 226343)
@@ -37,7 +37,7 @@
~InProcessMessagePortChannel() final;
void postMessageToRemote(Ref<SerializedScriptValue>&&, std::unique_ptr<MessagePortChannelArray>&&) final;
- Deque<std::unique_ptr<EventData>> takeAllMessagesFromRemote() final;
+ void takeAllMessagesFromRemote(CompletionHandler<void(Deque<std::unique_ptr<EventData>>&&)>&&) final;
bool isConnectedTo(const MessagePortIdentifier&) final;
bool entangleWithRemoteIfOpen(const MessagePortIdentifier&) final;
void disentangle() final;
Modified: trunk/Source/WebCore/dom/MessagePort.cpp (226342 => 226343)
--- trunk/Source/WebCore/dom/MessagePort.cpp 2018-01-03 00:20:48 UTC (rev 226342)
+++ trunk/Source/WebCore/dom/MessagePort.cpp 2018-01-03 00:51:01 UTC (rev 226343)
@@ -203,17 +203,19 @@
if (!m_entangledChannel)
return;
- bool contextIsWorker = is<WorkerGlobalScope>(*m_scriptExecutionContext);
-
- auto pendingMessages = m_entangledChannel->takeAllMessagesFromRemote();
- for (auto& message : pendingMessages) {
- // close() in Worker onmessage handler should prevent next message from dispatching.
- if (contextIsWorker && downcast<WorkerGlobalScope>(*m_scriptExecutionContext).isClosing())
+ m_entangledChannel->takeAllMessagesFromRemote([this, protectedThis = makeRef(*this)](Deque<std::unique_ptr<MessagePortChannel::EventData>>&& messages) {
+ if (!m_scriptExecutionContext)
return;
- auto ports = MessagePort::entanglePorts(*m_scriptExecutionContext, WTFMove(message->channels));
- dispatchEvent(MessageEvent::create(WTFMove(ports), WTFMove(message->message)));
- }
+ bool contextIsWorker = is<WorkerGlobalScope>(*m_scriptExecutionContext);
+ for (auto& message : messages) {
+ // close() in Worker onmessage handler should prevent next message from dispatching.
+ if (contextIsWorker && downcast<WorkerGlobalScope>(*m_scriptExecutionContext).isClosing())
+ return;
+ auto ports = MessagePort::entanglePorts(*m_scriptExecutionContext, WTFMove(message->channels));
+ dispatchEvent(MessageEvent::create(WTFMove(ports), WTFMove(message->message)));
+ }
+ });
}
bool MessagePort::hasPendingActivity() const
Modified: trunk/Source/WebCore/dom/MessagePortChannel.h (226342 => 226343)
--- trunk/Source/WebCore/dom/MessagePortChannel.h 2018-01-03 00:20:48 UTC (rev 226342)
+++ trunk/Source/WebCore/dom/MessagePortChannel.h 2018-01-03 00:51:01 UTC (rev 226343)
@@ -67,7 +67,7 @@
static void createChannelBetweenPorts(MessagePort&, MessagePort&);
virtual void postMessageToRemote(Ref<SerializedScriptValue>&&, std::unique_ptr<MessagePortChannelArray>&&) = 0;
- virtual Deque<std::unique_ptr<EventData>> takeAllMessagesFromRemote() = 0;
+ virtual void takeAllMessagesFromRemote(CompletionHandler<void(Deque<std::unique_ptr<EventData>>&&)>&&) = 0;
virtual bool isConnectedTo(const MessagePortIdentifier&) = 0;
virtual bool entangleWithRemoteIfOpen(const MessagePortIdentifier&) = 0;
virtual void disentangle() = 0;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes