Bug 1310967 - Update MessageEvent to the latest spec, r=smaug

This commit is contained in:
Andrea Marchesini
2016-10-24 17:10:46 +02:00
parent f83033ae45
commit 4e495f34fc
13 changed files with 34 additions and 54 deletions

View File

@@ -1081,7 +1081,8 @@ EventSource::DispatchAllMessageEvents()
RefPtr<MessageEvent> event = new MessageEvent(this, nullptr, nullptr); RefPtr<MessageEvent> event = new MessageEvent(this, nullptr, nullptr);
event->InitMessageEvent(nullptr, message->mEventName, false, false, jsData, event->InitMessageEvent(nullptr, message->mEventName, false, false, jsData,
mOrigin, message->mLastEventID, nullptr, nullptr); mOrigin, message->mLastEventID, nullptr,
Sequence<OwningNonNull<MessagePort>>());
event->SetTrusted(true); event->SetTrusted(true);
rv = DispatchDOMEvent(nullptr, static_cast<Event*>(event), nullptr, rv = DispatchDOMEvent(nullptr, static_cast<Event*>(event), nullptr,

View File

@@ -147,7 +147,8 @@ PostMessageEvent::Run()
event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"),
false /*non-bubbling */, false /*cancelable */, false /*non-bubbling */, false /*cancelable */,
messageData, mCallerOrigin, messageData, mCallerOrigin,
EmptyString(), source, nullptr); EmptyString(), source,
Sequence<OwningNonNull<MessagePort>>());
nsTArray<RefPtr<MessagePort>> ports = TakeTransferredPorts(); nsTArray<RefPtr<MessagePort>> ports = TakeTransferredPorts();
event->SetPorts(Move(ports)); event->SetPorts(Move(ports));

View File

@@ -2009,7 +2009,7 @@ WebSocket::CreateAndDispatchMessageEvent(const nsACString& aData,
event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), false, false, event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), false, false,
jsData, mImpl->mUTF16Origin, EmptyString(), nullptr, jsData, mImpl->mUTF16Origin, EmptyString(), nullptr,
nullptr); Sequence<OwningNonNull<MessagePort>>());
event->SetTrusted(true); event->SetTrusted(true);
return DispatchDOMEvent(nullptr, static_cast<Event*>(event), nullptr, return DispatchDOMEvent(nullptr, static_cast<Event*>(event), nullptr,

View File

@@ -417,7 +417,8 @@ nsDOMDataChannel::DoOnMessageAvailable(const nsACString& aData,
RefPtr<MessageEvent> event = new MessageEvent(this, nullptr, nullptr); RefPtr<MessageEvent> event = new MessageEvent(this, nullptr, nullptr);
event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), false, false, event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), false, false,
jsData, mOrigin, EmptyString(), nullptr, nullptr); jsData, mOrigin, EmptyString(), nullptr,
Sequence<OwningNonNull<MessagePort>>());
event->SetTrusted(true); event->SetTrusted(true);
LOG(("%p(%p): %s - Dispatching\n",this,(void*)mDataChannel,__FUNCTION__)); LOG(("%p(%p): %s - Dispatching\n",this,(void*)mDataChannel,__FUNCTION__));

View File

@@ -106,7 +106,7 @@ BroadcastChannelChild::RecvNotify(const ClonedMessageData& aData)
RootedDictionary<MessageEventInit> init(cx); RootedDictionary<MessageEventInit> init(cx);
init.mBubbles = false; init.mBubbles = false;
init.mCancelable = false; init.mCancelable = false;
init.mOrigin.Construct(mOrigin); init.mOrigin = mOrigin;
init.mData = value; init.mData = value;
ErrorResult rv; ErrorResult rv;

View File

@@ -46,7 +46,6 @@ MessageEvent::MessageEvent(EventTarget* aOwner,
WidgetEvent* aEvent) WidgetEvent* aEvent)
: Event(aOwner, aPresContext, aEvent) : Event(aOwner, aPresContext, aEvent)
, mData(JS::UndefinedValue()) , mData(JS::UndefinedValue())
, mPortsSet(false)
{ {
} }
@@ -120,13 +119,8 @@ MessageEvent::Constructor(EventTarget* aEventTarget,
mozilla::HoldJSObjects(event.get()); mozilla::HoldJSObjects(event.get());
if (aParam.mOrigin.WasPassed()) { event->mOrigin = aParam.mOrigin;
event->mOrigin = aParam.mOrigin.Value(); event->mLastEventId = aParam.mLastEventId;
}
if (aParam.mLastEventId.WasPassed()) {
event->mLastEventId = aParam.mLastEventId.Value();
}
if (!aParam.mSource.IsNull()) { if (!aParam.mSource.IsNull()) {
if (aParam.mSource.Value().IsWindow()) { if (aParam.mSource.Value().IsWindow()) {
@@ -138,10 +132,7 @@ MessageEvent::Constructor(EventTarget* aEventTarget,
MOZ_ASSERT(event->mWindowSource || event->mPortSource); MOZ_ASSERT(event->mWindowSource || event->mPortSource);
} }
if (aParam.mPorts.WasPassed() && !aParam.mPorts.Value().IsNull()) { event->mPorts.AppendElements(aParam.mPorts);
event->mPorts.AppendElements(aParam.mPorts.Value().Value());
event->mPortsSet = true;
}
return event.forget(); return event.forget();
} }
@@ -153,7 +144,7 @@ MessageEvent::InitMessageEvent(JSContext* aCx, const nsAString& aType,
const nsAString& aOrigin, const nsAString& aOrigin,
const nsAString& aLastEventId, const nsAString& aLastEventId,
const Nullable<WindowProxyOrMessagePort>& aSource, const Nullable<WindowProxyOrMessagePort>& aSource,
const Nullable<Sequence<OwningNonNull<MessagePort>>>& aPorts) const Sequence<OwningNonNull<MessagePort>>& aPorts)
{ {
Event::InitEvent(aType, aCanBubble, aCancelable); Event::InitEvent(aType, aCanBubble, aCancelable);
mData = aData; mData = aData;
@@ -174,33 +165,21 @@ MessageEvent::InitMessageEvent(JSContext* aCx, const nsAString& aType,
} }
mPorts.Clear(); mPorts.Clear();
mPortsSet = false; mPorts.AppendElements(aPorts);
if (!aPorts.IsNull()) {
mPorts.AppendElements(aPorts.Value());
mPortsSet = true;
}
MessageEventBinding::ClearCachedPortsValue(this); MessageEventBinding::ClearCachedPortsValue(this);
} }
void void
MessageEvent::GetPorts(Nullable<nsTArray<RefPtr<MessagePort>>>& aPorts) MessageEvent::GetPorts(nsTArray<RefPtr<MessagePort>>& aPorts)
{ {
if (!mPortsSet) { aPorts = mPorts;
aPorts.SetNull();
return;
}
aPorts.SetValue(mPorts);
} }
void void
MessageEvent::SetPorts(nsTArray<RefPtr<MessagePort>>&& aPorts) MessageEvent::SetPorts(nsTArray<RefPtr<MessagePort>>&& aPorts)
{ {
MOZ_ASSERT(mPorts.IsEmpty() && !mPortsSet); MOZ_ASSERT(mPorts.IsEmpty());
mPorts = Move(aPorts); mPorts = Move(aPorts);
mPortsSet = true;
} }
void void

View File

@@ -47,7 +47,7 @@ public:
void GetLastEventId(nsAString&) const; void GetLastEventId(nsAString&) const;
void GetSource(Nullable<OwningWindowProxyOrMessagePort>& aValue) const; void GetSource(Nullable<OwningWindowProxyOrMessagePort>& aValue) const;
void GetPorts(Nullable<nsTArray<RefPtr<MessagePort>>>& aPorts); void GetPorts(nsTArray<RefPtr<MessagePort>>& aPorts);
void SetPorts(nsTArray<RefPtr<MessagePort>>&& aPorts); void SetPorts(nsTArray<RefPtr<MessagePort>>&& aPorts);
@@ -75,7 +75,7 @@ public:
bool aCancelable, JS::Handle<JS::Value> aData, bool aCancelable, JS::Handle<JS::Value> aData,
const nsAString& aOrigin, const nsAString& aLastEventId, const nsAString& aOrigin, const nsAString& aLastEventId,
const Nullable<WindowProxyOrMessagePort>& aSource, const Nullable<WindowProxyOrMessagePort>& aSource,
const Nullable<Sequence<OwningNonNull<MessagePort>>>& aPorts); const Sequence<OwningNonNull<MessagePort>>& aPorts);
protected: protected:
~MessageEvent(); ~MessageEvent();
@@ -88,7 +88,6 @@ private:
RefPtr<MessagePort> mPortSource; RefPtr<MessagePort> mPortSource;
nsTArray<RefPtr<MessagePort>> mPorts; nsTArray<RefPtr<MessagePort>> mPorts;
bool mPortsSet;
}; };
} // namespace dom } // namespace dom

View File

@@ -17,7 +17,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=848294
ok(e, "MessageEvent created"); ok(e, "MessageEvent created");
is(e.type, 'message', 'MessageEvent.type is right'); is(e.type, 'message', 'MessageEvent.type is right');
is(e.data, 'data' in test ? test.data : undefined, 'MessageEvent.data is ok'); is(e.data, 'data' in test ? test.data : null, 'MessageEvent.data is ok');
is(e.origin, 'origin' in test ? test.origin : '', 'MessageEvent.origin is ok'); is(e.origin, 'origin' in test ? test.origin : '', 'MessageEvent.origin is ok');
is(e.lastEventId, 'lastEventId' in test ? test.lastEventId : '', 'MessageEvent.lastEventId is ok'); is(e.lastEventId, 'lastEventId' in test ? test.lastEventId : '', 'MessageEvent.lastEventId is ok');
is(e.source, 'source' in test ? test.source : null, 'MessageEvent.source is ok'); is(e.source, 'source' in test ? test.source : null, 'MessageEvent.source is ok');
@@ -43,7 +43,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=848294
{ data: window, source: window }, { data: window, source: window },
{ data: window, source: channel.port1 }, { data: window, source: channel.port1 },
{ data: window, source: channel.port1, ports: [ channel.port1, channel.port2 ] }, { data: window, source: channel.port1, ports: [ channel.port1, channel.port2 ] },
{ data: null, ports: null }, { data: null, ports: [] },
]; ];
while (tests.length) { while (tests.length) {
@@ -54,11 +54,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=848294
e = new MessageEvent('message'); e = new MessageEvent('message');
e.initMessageEvent('message', true, true, e.initMessageEvent('message', true, true,
'data' in test ? test.data : undefined, 'data' in test ? test.data : null,
'origin' in test ? test.origin : '', 'origin' in test ? test.origin : '',
'lastEventId' in test ? test.lastEventId : '', 'lastEventId' in test ? test.lastEventId : '',
'source' in test ? test.source : null, 'source' in test ? test.source : null,
'ports' in test ? test.ports : null); 'ports' in test ? test.ports : []);
testMessageEvent(e, test); testMessageEvent(e, test);
} }

View File

@@ -20,9 +20,6 @@ a.initMessageEvent("message", true, false, {}, window.location.href, "", null, [
ok(Array.isArray(a.ports), "After InitMessageEvent() we have an array"); ok(Array.isArray(a.ports), "After InitMessageEvent() we have an array");
is(a.ports.length, 1, "Length is 1"); is(a.ports.length, 1, "Length is 1");
a.initMessageEvent("message", true, false, {}, window.location.href, "", null, null);
is(a.ports, null, "By default MessageEvent.ports is null");
</script> </script>
</body> </body>
</html> </html>

View File

@@ -137,7 +137,8 @@ private:
event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"),
false /* non-bubbling */, false /* non-bubbling */,
false /* cancelable */, value, EmptyString(), false /* cancelable */, value, EmptyString(),
EmptyString(), nullptr, nullptr); EmptyString(), nullptr,
Sequence<OwningNonNull<MessagePort>>());
event->SetTrusted(true); event->SetTrusted(true);
event->SetSource(mPort); event->SetSource(mPort);

View File

@@ -580,7 +580,8 @@ PresentationConnection::DispatchMessageEvent(JS::Handle<JS::Value> aData)
messageEvent->InitMessageEvent(nullptr, messageEvent->InitMessageEvent(nullptr,
NS_LITERAL_STRING("message"), NS_LITERAL_STRING("message"),
false, false, aData, origin, false, false, aData, origin,
EmptyString(), nullptr, nullptr); EmptyString(), nullptr,
Sequence<OwningNonNull<MessagePort>>());
messageEvent->SetTrusted(true); messageEvent->SetTrusted(true);
RefPtr<AsyncEventDispatcher> asyncDispatcher = RefPtr<AsyncEventDispatcher> asyncDispatcher =

View File

@@ -41,18 +41,18 @@ interface MessageEvent : Event {
* data, origin, source, and lastEventId attributes of this appropriately. * data, origin, source, and lastEventId attributes of this appropriately.
*/ */
[Pure, Cached, Frozen] [Pure, Cached, Frozen]
readonly attribute sequence<MessagePort>? ports; readonly attribute sequence<MessagePort> ports;
void initMessageEvent(DOMString type, boolean bubbles, boolean cancelable, void initMessageEvent(DOMString type, boolean bubbles, boolean cancelable,
any data, DOMString origin, DOMString lastEventId, any data, DOMString origin, DOMString lastEventId,
(WindowProxy or MessagePort)? source, (WindowProxy or MessagePort)? source,
sequence<MessagePort>? ports); sequence<MessagePort> ports);
}; };
dictionary MessageEventInit : EventInit { dictionary MessageEventInit : EventInit {
any data; any data = null;
DOMString origin; DOMString origin = "";
DOMString lastEventId; DOMString lastEventId = "";
(Window or MessagePort)? source = null; (Window or MessagePort)? source = null;
sequence<MessagePort>? ports; sequence<MessagePort> ports = [];
}; };

View File

@@ -723,7 +723,7 @@ public:
EmptyString(), EmptyString(),
EmptyString(), EmptyString(),
nullptr, nullptr,
nullptr); Sequence<OwningNonNull<MessagePort>>());
event->SetPorts(Move(ports)); event->SetPorts(Move(ports));
domEvent = do_QueryObject(event); domEvent = do_QueryObject(event);
} }
@@ -815,7 +815,7 @@ private:
EmptyString(), EmptyString(),
EmptyString(), EmptyString(),
nullptr, nullptr,
nullptr); Sequence<OwningNonNull<MessagePort>>());
event->SetTrusted(true); event->SetTrusted(true);
nsCOMPtr<nsIDOMEvent> domEvent = do_QueryObject(event); nsCOMPtr<nsIDOMEvent> domEvent = do_QueryObject(event);