https://bugs.webkit.org/show_bug.cgi?id=178839
Reviewed by Brady Eidson.
messageEvent.source can also be a ServiceWorker:
- https://html.spec.whatwg.org/multipage/comms.html#messageeventsource
This enables calling postMessage() from a ServiceWorker via Bug 178794.
* dom/MessageEvent.cpp:
(WebCore::MessageEvent::source const): Deleted.
* dom/MessageEvent.h:
* dom/MessageEvent.idl:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@224000
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2017-10-25 Chris Dumez <cdumez@apple.com>
+
+ messageEvent.source can also be a ServiceWorker
+ https://bugs.webkit.org/show_bug.cgi?id=178839
+
+ Reviewed by Brady Eidson.
+
+ messageEvent.source can also be a ServiceWorker:
+ - https://html.spec.whatwg.org/multipage/comms.html#messageeventsource
+
+ This enables calling postMessage() from a ServiceWorker via Bug 178794.
+
+ * dom/MessageEvent.cpp:
+ (WebCore::MessageEvent::source const): Deleted.
+ * dom/MessageEvent.h:
+ * dom/MessageEvent.idl:
+
2017-10-25 Ryosuke Niwa <rniwa@webkit.org>
Style::Scope::flushPendingUpdate() can replace the entire document in XSLTProcessor::createDocumentFromSource
m_ports = WTFMove(ports);
}
-EventTarget* MessageEvent::source() const
-{
- if (!m_source)
- return nullptr;
-
- return WTF::switchOn(m_source.value(),
- [] (const RefPtr<DOMWindow>& window) -> EventTarget* { return const_cast<DOMWindow*>(window.get()); },
- [] (const RefPtr<MessagePort>& messagePort) -> EventTarget* { return const_cast<MessagePort*>(messagePort.get()); }
- );
-}
-
RefPtr<SerializedScriptValue> MessageEvent::trySerializeData(ExecState* exec)
{
ASSERT(!m_dataAsScriptValue.hasNoValue());
#include "Event.h"
#include "MessagePort.h"
#include "SerializedScriptValue.h"
+#include "ServiceWorker.h"
#include <bindings/ScriptValue.h>
#include <wtf/Variant.h>
class Blob;
+#if ENABLE(SERVICE_WORKER)
+using MessageEventSource = Variant<RefPtr<DOMWindow>, RefPtr<MessagePort>, RefPtr<ServiceWorker>>;
+#else
using MessageEventSource = Variant<RefPtr<DOMWindow>, RefPtr<MessagePort>>;
+#endif
class MessageEvent final : public Event {
public:
const String& origin() const { return m_origin; }
const String& lastEventId() const { return m_lastEventId; }
- EventTarget* source() const;
+ const std::optional<MessageEventSource>& source() const { return m_source; }
const Vector<RefPtr<MessagePort>>& ports() const { return m_ports; }
// FIXME: Remove this when we have custom ObjC binding support.
*
*/
+#if defined(ENABLE_SERVICE_WORKER) && ENABLE_SERVICE_WORKER
+typedef (DOMWindow or MessagePort or ServiceWorker) MessageEventSource;
+#else
+typedef (DOMWindow or MessagePort) MessageEventSource;
+#endif
+
[
Constructor(DOMString type, optional MessageEventInit eventInitDict),
ConstructorCallWith=ScriptState,
] interface MessageEvent : Event {
readonly attribute USVString origin;
readonly attribute DOMString lastEventId;
- readonly attribute EventTarget? source;
+ readonly attribute MessageEventSource? source;
[CachedAttribute, CustomGetter] readonly attribute any data;
readonly attribute FrozenArray<MessagePort> ports;
[CallWith=ScriptState] void initMessageEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false,
- optional any data = null, optional USVString originArg = "", optional DOMString lastEventId = "", optional (DOMWindow or MessagePort)? source = null,
+ optional any data = null, optional USVString originArg = "", optional DOMString lastEventId = "", optional MessageEventSource? source = null,
optional sequence<MessagePort> messagePorts = []);
};
any data = null;
USVString origin = "";
DOMString lastEventId = "";
- (DOMWindow or MessagePort)? source = null;
+ MessageEventSource? source = null;
sequence<MessagePort> ports = [];
};