Source/WebCore/ChangeLog

 12017-10-25 Chris Dumez <cdumez@apple.com>
 2
 3 messageEvent.source can also be a ServiceWorker
 4 https://bugs.webkit.org/show_bug.cgi?id=178839
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 messageEvent.source can also be a ServiceWorker:
 9 - https://html.spec.whatwg.org/multipage/comms.html#messageeventsource
 10
 11 This enables calling postMessage() from a ServiceWorker via Bug 178794.
 12
 13 * dom/MessageEvent.cpp:
 14 (WebCore::MessageEvent::source const): Deleted.
 15 * dom/MessageEvent.h:
 16 * dom/MessageEvent.idl:
 17
1182017-10-25 Ryosuke Niwa <rniwa@webkit.org>
219
320 Style::Scope::flushPendingUpdate() can replace the entire document in XSLTProcessor::createDocumentFromSource

Source/WebCore/dom/MessageEvent.cpp

@@void MessageEvent::initMessageEvent(ExecState& state, const AtomicString& type,
150150 m_ports = WTFMove(ports);
151151}
152152
153 EventTarget* MessageEvent::source() const
154 {
155  if (!m_source)
156  return nullptr;
157 
158  return WTF::switchOn(m_source.value(),
159  [] (const RefPtr<DOMWindow>& window) -> EventTarget* { return const_cast<DOMWindow*>(window.get()); },
160  [] (const RefPtr<MessagePort>& messagePort) -> EventTarget* { return const_cast<MessagePort*>(messagePort.get()); }
161  );
162 }
163 
164153RefPtr<SerializedScriptValue> MessageEvent::trySerializeData(ExecState* exec)
165154{
166155 ASSERT(!m_dataAsScriptValue.hasNoValue());

Source/WebCore/dom/MessageEvent.h

3131#include "Event.h"
3232#include "MessagePort.h"
3333#include "SerializedScriptValue.h"
 34#include "ServiceWorker.h"
3435#include <bindings/ScriptValue.h>
3536#include <wtf/Variant.h>
3637

@@namespace WebCore {
3839
3940class Blob;
4041
41 using MessageEventSource = Variant<RefPtr<DOMWindow>, RefPtr<MessagePort>>;
 42using MessageEventSource = Variant<RefPtr<DOMWindow>, RefPtr<MessagePort>
 43#if ENABLE(SERVICE_WORKER)
 44 , RefPtr<ServiceWorker>
 45#endif
 46 >;
4247
4348class MessageEvent final : public Event {
4449public:

@@public:
6469
6570 const String& origin() const { return m_origin; }
6671 const String& lastEventId() const { return m_lastEventId; }
67  EventTarget* source() const;
 72 const std::optional<MessageEventSource>& source() const { return m_source; }
6873 const Vector<RefPtr<MessagePort>>& ports() const { return m_ports; }
6974
7075 // FIXME: Remove this when we have custom ObjC binding support.

Source/WebCore/dom/MessageEvent.idl

2626 *
2727 */
2828
 29#if defined(ENABLE_SERVICE_WORKER) && ENABLE_SERVICE_WORKER
 30typedef (DOMWindow or MessagePort or ServiceWorker) MessageEventSource;
 31#else
 32typedef (DOMWindow or MessagePort) MessageEventSource;
 33#endif
 34
2935[
3036 Constructor(DOMString type, optional MessageEventInit eventInitDict),
3137 ConstructorCallWith=ScriptState,

3339] interface MessageEvent : Event {
3440 readonly attribute USVString origin;
3541 readonly attribute DOMString lastEventId;
36  readonly attribute EventTarget? source;
 42 readonly attribute MessageEventSource? source;
3743 [CachedAttribute, CustomGetter] readonly attribute any data;
3844 readonly attribute FrozenArray<MessagePort> ports;
3945
4046 [CallWith=ScriptState] void initMessageEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false,
41  optional any data = null, optional USVString originArg = "", optional DOMString lastEventId = "", optional (DOMWindow or MessagePort)? source = null,
 47 optional any data = null, optional USVString originArg = "", optional DOMString lastEventId = "", optional MessageEventSource? source = null,
4248 optional sequence<MessagePort> messagePorts = []);
4349};
4450

@@dictionary MessageEventInit : EventInit {
4652 any data = null;
4753 USVString origin = "";
4854 DOMString lastEventId = "";
49  (DOMWindow or MessagePort)? source = null;
 55 MessageEventSource? source = null;
5056 sequence<MessagePort> ports = [];
5157};