WebMessagePortChannelProvider.h [plain text]
#pragma once
#include <WebCore/MessagePortChannelProvider.h>
#include <wtf/CompletionHandler.h>
#include <wtf/HashMap.h>
namespace WebKit {
class WebMessagePortChannelProvider : public WebCore::MessagePortChannelProvider {
public:
static WebMessagePortChannelProvider& singleton();
void didTakeAllMessagesForPort(Vector<WebCore::MessageWithMessagePorts>&& messages, uint64_t messageCallbackIdentifier, uint64_t messageBatchIdentifier);
void checkProcessLocalPortForActivity(const WebCore::MessagePortIdentifier&, uint64_t callbackIdentifier);
void didCheckRemotePortForActivity(uint64_t callbackIdentifier, bool hasActivity);
private:
WebMessagePortChannelProvider();
~WebMessagePortChannelProvider() final;
void createNewMessagePortChannel(const WebCore::MessagePortIdentifier& local, const WebCore::MessagePortIdentifier& remote) final;
void entangleLocalPortInThisProcessToRemote(const WebCore::MessagePortIdentifier& local, const WebCore::MessagePortIdentifier& remote) final;
void messagePortDisentangled(const WebCore::MessagePortIdentifier& local) final;
void messagePortClosed(const WebCore::MessagePortIdentifier& local) final;
void takeAllMessagesForPort(const WebCore::MessagePortIdentifier&, Function<void(Vector<WebCore::MessageWithMessagePorts>&&, Function<void()>&&)>&&) final;
void postMessageToRemote(WebCore::MessageWithMessagePorts&&, const WebCore::MessagePortIdentifier& remoteTarget) final;
void checkProcessLocalPortForActivity(const WebCore::MessagePortIdentifier&, WebCore::ProcessIdentifier, CompletionHandler<void(HasActivity)>&&) final;
void checkRemotePortForActivity(const WebCore::MessagePortIdentifier& remoteTarget, CompletionHandler<void(HasActivity)>&& callback) final;
Lock m_takeAllMessagesCallbackLock;
HashMap<uint64_t, CompletionHandler<void(Vector<WebCore::MessageWithMessagePorts>&&, Function<void()>&&)>> m_takeAllMessagesCallbacks;
Lock m_remoteActivityCallbackLock;
HashMap<uint64_t, CompletionHandler<void(HasActivity)>> m_remoteActivityCallbacks;
};
}