diff options
Diffstat (limited to 'Source/WebCore/dom/MessageEvent.h')
-rw-r--r-- | Source/WebCore/dom/MessageEvent.h | 107 |
1 files changed, 40 insertions, 67 deletions
diff --git a/Source/WebCore/dom/MessageEvent.h b/Source/WebCore/dom/MessageEvent.h index cfb2fa414..efd65b3c4 100644 --- a/Source/WebCore/dom/MessageEvent.h +++ b/Source/WebCore/dom/MessageEvent.h @@ -11,10 +11,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -25,80 +25,51 @@ * */ -#ifndef MessageEvent_h -#define MessageEvent_h +#pragma once -#include "Blob.h" #include "DOMWindow.h" #include "Event.h" #include "MessagePort.h" #include "SerializedScriptValue.h" #include <bindings/ScriptValue.h> -#include <runtime/ArrayBuffer.h> +#include <wtf/Variant.h> namespace WebCore { -class EventTarget; +class Blob; -struct MessageEventInit : public EventInit { - MessageEventInit(); +using MessageEventSource = Variant<RefPtr<DOMWindow>, RefPtr<MessagePort>>; - Deprecated::ScriptValue data; - String origin; - String lastEventId; - RefPtr<EventTarget> source; - MessagePortArray ports; -}; - -class MessageEvent : public Event { +class MessageEvent final : public Event { public: - static PassRefPtr<MessageEvent> create() - { - return adoptRef(new MessageEvent); - } - static PassRefPtr<MessageEvent> create(PassOwnPtr<MessagePortArray> ports, const Deprecated::ScriptValue& data = Deprecated::ScriptValue(), const String& origin = String(), const String& lastEventId = String(), PassRefPtr<EventTarget> source = 0) - { - return adoptRef(new MessageEvent(data, origin, lastEventId, source, ports)); - } - static PassRefPtr<MessageEvent> create(PassOwnPtr<MessagePortArray> ports, PassRefPtr<SerializedScriptValue> data, const String& origin = String(), const String& lastEventId = String(), PassRefPtr<EventTarget> source = 0) - { - return adoptRef(new MessageEvent(data, origin, lastEventId, source, ports)); - } - static PassRefPtr<MessageEvent> create(const String& data, const String& origin = String()) - { - return adoptRef(new MessageEvent(data, origin)); - } - static PassRefPtr<MessageEvent> create(PassRefPtr<Blob> data, const String& origin = String()) - { - return adoptRef(new MessageEvent(data, origin)); - } - static PassRefPtr<MessageEvent> create(PassRefPtr<ArrayBuffer> data, const String& origin = String()) - { - return adoptRef(new MessageEvent(data, origin)); - } - static PassRefPtr<MessageEvent> create(const AtomicString& type, const MessageEventInit& initializer) - { - return adoptRef(new MessageEvent(type, initializer)); - } + static Ref<MessageEvent> create(Vector<RefPtr<MessagePort>>&&, RefPtr<SerializedScriptValue>&&, const String& origin = { }, const String& lastEventId = { }, std::optional<MessageEventSource>&& source = std::nullopt); + static Ref<MessageEvent> create(const AtomicString& type, RefPtr<SerializedScriptValue>&&, const String& origin, const String& lastEventId); + static Ref<MessageEvent> create(const String& data, const String& origin = { }); + static Ref<MessageEvent> create(Ref<Blob>&& data, const String& origin); + static Ref<MessageEvent> create(Ref<ArrayBuffer>&& data, const String& origin = { }); + static Ref<MessageEvent> createForBindings(); + + struct Init : EventInit { + JSC::JSValue data; + String origin; + String lastEventId; + std::optional<MessageEventSource> source; + Vector<RefPtr<MessagePort>> ports; + }; + static Ref<MessageEvent> create(JSC::ExecState&, const AtomicString& type, Init&&, IsTrusted = IsTrusted::No); + virtual ~MessageEvent(); - void initMessageEvent(const AtomicString& type, bool canBubble, bool cancelable, const Deprecated::ScriptValue& data, const String& origin, const String& lastEventId, DOMWindow* source, PassOwnPtr<MessagePortArray>); - void initMessageEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, DOMWindow* source, PassOwnPtr<MessagePortArray>); + void initMessageEvent(JSC::ExecState&, const AtomicString& type, bool canBubble, bool cancelable, JSC::JSValue data, const String& origin, const String& lastEventId, std::optional<MessageEventSource>&&, Vector<RefPtr<MessagePort>>&&); const String& origin() const { return m_origin; } const String& lastEventId() const { return m_lastEventId; } - EventTarget* source() const { return m_source.get(); } - MessagePortArray ports() const { return m_ports ? *m_ports : MessagePortArray(); } + EventTarget* source() const; + const Vector<RefPtr<MessagePort>>& ports() const { return m_ports; } // FIXME: Remove this when we have custom ObjC binding support. SerializedScriptValue* data() const; - // Needed for Objective-C bindings (see bug 28774). - MessagePort* messagePort(); - void initMessageEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, DOMWindow* source, MessagePort*); - - virtual EventInterface eventInterface() const override; - enum DataType { DataTypeScriptValue, DataTypeSerializedScriptValue, @@ -107,34 +78,36 @@ public: DataTypeArrayBuffer }; DataType dataType() const { return m_dataType; } - const Deprecated::ScriptValue& dataAsScriptValue() const { ASSERT(m_dataType == DataTypeScriptValue); return m_dataAsScriptValue; } - PassRefPtr<SerializedScriptValue> dataAsSerializedScriptValue() const { ASSERT(m_dataType == DataTypeSerializedScriptValue); return m_dataAsSerializedScriptValue; } + JSC::JSValue dataAsScriptValue() const { ASSERT(m_dataType == DataTypeScriptValue); return m_dataAsScriptValue; } + SerializedScriptValue* dataAsSerializedScriptValue() const { ASSERT(m_dataType == DataTypeSerializedScriptValue); return m_dataAsSerializedScriptValue.get(); } String dataAsString() const { ASSERT(m_dataType == DataTypeString); return m_dataAsString; } Blob* dataAsBlob() const { ASSERT(m_dataType == DataTypeBlob); return m_dataAsBlob.get(); } ArrayBuffer* dataAsArrayBuffer() const { ASSERT(m_dataType == DataTypeArrayBuffer); return m_dataAsArrayBuffer.get(); } + RefPtr<SerializedScriptValue> trySerializeData(JSC::ExecState*); + private: MessageEvent(); - MessageEvent(const AtomicString&, const MessageEventInit&); - MessageEvent(const Deprecated::ScriptValue& data, const String& origin, const String& lastEventId, PassRefPtr<EventTarget> source, PassOwnPtr<MessagePortArray>); - MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, PassRefPtr<EventTarget> source, PassOwnPtr<MessagePortArray>); + MessageEvent(JSC::ExecState&, const AtomicString&, Init&&, IsTrusted); + MessageEvent(RefPtr<SerializedScriptValue>&& data, const String& origin, const String& lastEventId, std::optional<MessageEventSource>&&, Vector<RefPtr<MessagePort>>&&); + MessageEvent(const AtomicString& type, RefPtr<SerializedScriptValue>&& data, const String& origin, const String& lastEventId); + MessageEvent(const String& data, const String& origin); + MessageEvent(Ref<Blob>&& data, const String& origin); + MessageEvent(Ref<ArrayBuffer>&& data, const String& origin); - explicit MessageEvent(const String& data, const String& origin); - explicit MessageEvent(PassRefPtr<Blob> data, const String& origin); - explicit MessageEvent(PassRefPtr<ArrayBuffer> data, const String& origin); + EventInterface eventInterface() const final; DataType m_dataType; Deprecated::ScriptValue m_dataAsScriptValue; RefPtr<SerializedScriptValue> m_dataAsSerializedScriptValue; + bool m_triedToSerialize { false }; String m_dataAsString; RefPtr<Blob> m_dataAsBlob; RefPtr<ArrayBuffer> m_dataAsArrayBuffer; String m_origin; String m_lastEventId; - RefPtr<EventTarget> m_source; - OwnPtr<MessagePortArray> m_ports; + std::optional<MessageEventSource> m_source; + Vector<RefPtr<MessagePort>> m_ports; }; } // namespace WebCore - -#endif // MessageEvent_h |