MessagePortChannelProvider.h [plain text]
#pragma once
#include "ProcessIdentifier.h"
#include <wtf/CompletionHandler.h>
#include <wtf/Vector.h>
namespace WebCore {
class ScriptExecutionContext;
struct MessagePortIdentifier;
struct MessageWithMessagePorts;
class MessagePortChannelProvider {
public:
static MessagePortChannelProvider& fromContext(ScriptExecutionContext&);
static MessagePortChannelProvider& singleton();
WEBCORE_EXPORT static void setSharedProvider(MessagePortChannelProvider&);
virtual ~MessagePortChannelProvider() { }
virtual void createNewMessagePortChannel(const MessagePortIdentifier& local, const MessagePortIdentifier& remote) = 0;
virtual void entangleLocalPortInThisProcessToRemote(const MessagePortIdentifier& local, const MessagePortIdentifier& remote) = 0;
virtual void messagePortDisentangled(const MessagePortIdentifier& local) = 0;
virtual void messagePortClosed(const MessagePortIdentifier& local) = 0;
virtual void takeAllMessagesForPort(const MessagePortIdentifier&, CompletionHandler<void(Vector<MessageWithMessagePorts>&&, Function<void()>&&)>&&) = 0;
virtual void postMessageToRemote(MessageWithMessagePorts&&, const MessagePortIdentifier& remoteTarget) = 0;
enum class HasActivity {
Yes,
No,
};
virtual void checkRemotePortForActivity(const MessagePortIdentifier& remoteTarget, CompletionHandler<void(HasActivity)>&& callback) = 0;
private:
};
}
namespace WTF {
template<> struct EnumTraits<WebCore::MessagePortChannelProvider::HasActivity> {
using values = EnumValues<
WebCore::MessagePortChannelProvider::HasActivity,
WebCore::MessagePortChannelProvider::HasActivity::No,
WebCore::MessagePortChannelProvider::HasActivity::Yes
>;
};
}