ExtendableMessageEvent.h [plain text]
#pragma once
#if ENABLE(SERVICE_WORKER)
#include "ExtendableEvent.h"
#include "ExtendableEventInit.h"
#include "MessagePort.h"
#include "ServiceWorker.h"
#include "ServiceWorkerClient.h"
#include <wtf/Variant.h>
namespace JSC {
class ExecState;
class JSValue;
}
namespace WebCore {
class MessagePort;
class ServiceWorker;
class ServiceWorkerClient;
using ExtendableMessageEventSource = Variant<RefPtr<ServiceWorkerClient>, RefPtr<ServiceWorker>, RefPtr<MessagePort>>;
class ExtendableMessageEvent final : public ExtendableEvent {
public:
struct Init : ExtendableEventInit {
JSC::JSValue data;
String origin;
String lastEventId;
std::optional<ExtendableMessageEventSource> source;
Vector<RefPtr<MessagePort>> ports;
};
static Ref<ExtendableMessageEvent> create(JSC::ExecState& state, const AtomicString& type, const Init& initializer, IsTrusted isTrusted = IsTrusted::No)
{
return adoptRef(*new ExtendableMessageEvent(state, type, initializer, isTrusted));
}
static Ref<ExtendableMessageEvent> create(Vector<RefPtr<MessagePort>>&&, RefPtr<SerializedScriptValue>&&, const String& origin = { }, const String& lastEventId = { }, std::optional<ExtendableMessageEventSource>&& source = std::nullopt);
~ExtendableMessageEvent();
SerializedScriptValue* data() const { return m_data.get(); }
const String& origin() const { return m_origin; }
const String& lastEventId() const { return m_lastEventId; }
const std::optional<ExtendableMessageEventSource>& source() const { return m_source; }
const Vector<RefPtr<MessagePort>>& ports() const { return m_ports; }
EventInterface eventInterface() const final { return ExtendableMessageEventInterfaceType; }
private:
ExtendableMessageEvent(JSC::ExecState&, const AtomicString&, const Init&, IsTrusted);
ExtendableMessageEvent(RefPtr<SerializedScriptValue>&& data, const String& origin, const String& lastEventId, std::optional<ExtendableMessageEventSource>&&, Vector<RefPtr<MessagePort>>&&);
RefPtr<SerializedScriptValue> m_data;
String m_origin;
String m_lastEventId;
std::optional<ExtendableMessageEventSource> m_source;
Vector<RefPtr<MessagePort>> m_ports;
};
}
#endif // ENABLE(SERVICE_WORKER)