From 8f8236ba1e612a468325cb2c09f7c339edabad65 Mon Sep 17 00:00:00 2001 From: Wes Kocher Date: Tue, 18 Oct 2016 10:53:44 -0700 Subject: [PATCH] Backed out 2 changesets (bug 1310967) for failures in messageEvent tests a=backou Backed out changeset dac69b2b8d26 (bug 1310967) Backed out changeset 133feae49330 (bug 1310967) --- dom/base/EventSource.cpp | 3 +- dom/base/PostMessageEvent.cpp | 3 +- dom/base/WebSocket.cpp | 2 +- dom/base/nsDOMDataChannel.cpp | 3 +- .../BroadcastChannelChild.cpp | 2 +- dom/events/MessageEvent.cpp | 37 +++++++++++++++---- dom/events/MessageEvent.h | 5 ++- dom/events/test/test_messageEvent.html | 8 ++-- dom/messagechannel/MessagePort.cpp | 3 +- dom/presentation/PresentationConnection.cpp | 3 +- dom/webidl/MessageEvent.webidl | 12 +++--- dom/workers/WorkerPrivate.cpp | 4 +- 12 files changed, 51 insertions(+), 34 deletions(-) diff --git a/dom/base/EventSource.cpp b/dom/base/EventSource.cpp index 754a2d13b350..61a709f7b3f6 100644 --- a/dom/base/EventSource.cpp +++ b/dom/base/EventSource.cpp @@ -1081,8 +1081,7 @@ EventSource::DispatchAllMessageEvents() RefPtr event = new MessageEvent(this, nullptr, nullptr); event->InitMessageEvent(nullptr, message->mEventName, false, false, jsData, - mOrigin, message->mLastEventID, nullptr, - Sequence>()); + mOrigin, message->mLastEventID, nullptr, nullptr); event->SetTrusted(true); rv = DispatchDOMEvent(nullptr, static_cast(event), nullptr, diff --git a/dom/base/PostMessageEvent.cpp b/dom/base/PostMessageEvent.cpp index adc02a1ff607..7bbc7f550531 100644 --- a/dom/base/PostMessageEvent.cpp +++ b/dom/base/PostMessageEvent.cpp @@ -147,8 +147,7 @@ PostMessageEvent::Run() event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), false /*non-bubbling */, false /*cancelable */, messageData, mCallerOrigin, - EmptyString(), source, - Sequence>()); + EmptyString(), source, nullptr); nsTArray> ports = TakeTransferredPorts(); event->SetPorts(Move(ports)); diff --git a/dom/base/WebSocket.cpp b/dom/base/WebSocket.cpp index d7d73c6c102a..42dcbeffc71d 100644 --- a/dom/base/WebSocket.cpp +++ b/dom/base/WebSocket.cpp @@ -2009,7 +2009,7 @@ WebSocket::CreateAndDispatchMessageEvent(const nsACString& aData, event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), false, false, jsData, mImpl->mUTF16Origin, EmptyString(), nullptr, - Sequence>()); + nullptr); event->SetTrusted(true); return DispatchDOMEvent(nullptr, static_cast(event), nullptr, diff --git a/dom/base/nsDOMDataChannel.cpp b/dom/base/nsDOMDataChannel.cpp index 99ba202f5794..5c64e37ffc0e 100644 --- a/dom/base/nsDOMDataChannel.cpp +++ b/dom/base/nsDOMDataChannel.cpp @@ -405,8 +405,7 @@ nsDOMDataChannel::DoOnMessageAvailable(const nsACString& aData, RefPtr event = new MessageEvent(this, nullptr, nullptr); event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), false, false, - jsData, mOrigin, EmptyString(), nullptr, - Sequence>()); + jsData, mOrigin, EmptyString(), nullptr, nullptr); event->SetTrusted(true); LOG(("%p(%p): %s - Dispatching\n",this,(void*)mDataChannel,__FUNCTION__)); diff --git a/dom/broadcastchannel/BroadcastChannelChild.cpp b/dom/broadcastchannel/BroadcastChannelChild.cpp index 98bd219992ee..c1ef91079bb9 100644 --- a/dom/broadcastchannel/BroadcastChannelChild.cpp +++ b/dom/broadcastchannel/BroadcastChannelChild.cpp @@ -106,7 +106,7 @@ BroadcastChannelChild::RecvNotify(const ClonedMessageData& aData) RootedDictionary init(cx); init.mBubbles = false; init.mCancelable = false; - init.mOrigin = mOrigin; + init.mOrigin.Construct(mOrigin); init.mData = value; ErrorResult rv; diff --git a/dom/events/MessageEvent.cpp b/dom/events/MessageEvent.cpp index 9fcaec3f8e07..aa359e5c613b 100644 --- a/dom/events/MessageEvent.cpp +++ b/dom/events/MessageEvent.cpp @@ -46,6 +46,7 @@ MessageEvent::MessageEvent(EventTarget* aOwner, WidgetEvent* aEvent) : Event(aOwner, aPresContext, aEvent) , mData(JS::UndefinedValue()) + , mPortsSet(false) { } @@ -119,8 +120,13 @@ MessageEvent::Constructor(EventTarget* aEventTarget, mozilla::HoldJSObjects(event.get()); - event->mOrigin = aParam.mOrigin; - event->mLastEventId = aParam.mLastEventId; + if (aParam.mOrigin.WasPassed()) { + event->mOrigin = aParam.mOrigin.Value(); + } + + if (aParam.mLastEventId.WasPassed()) { + event->mLastEventId = aParam.mLastEventId.Value(); + } if (!aParam.mSource.IsNull()) { if (aParam.mSource.Value().IsWindow()) { @@ -132,7 +138,10 @@ MessageEvent::Constructor(EventTarget* aEventTarget, MOZ_ASSERT(event->mWindowSource || event->mPortSource); } - event->mPorts.AppendElements(aParam.mPorts); + if (aParam.mPorts.WasPassed() && !aParam.mPorts.Value().IsNull()) { + event->mPorts.AppendElements(aParam.mPorts.Value().Value()); + event->mPortsSet = true; + } return event.forget(); } @@ -144,7 +153,7 @@ MessageEvent::InitMessageEvent(JSContext* aCx, const nsAString& aType, const nsAString& aOrigin, const nsAString& aLastEventId, const Nullable& aSource, - const Sequence>& aPorts) + const Nullable>>& aPorts) { Event::InitEvent(aType, aCanBubble, aCancelable); mData = aData; @@ -165,21 +174,33 @@ MessageEvent::InitMessageEvent(JSContext* aCx, const nsAString& aType, } mPorts.Clear(); - mPorts.AppendElements(aPorts); + mPortsSet = false; + + if (!aPorts.IsNull()) { + mPorts.AppendElements(aPorts.Value()); + mPortsSet = true; + } + MessageEventBinding::ClearCachedPortsValue(this); } void -MessageEvent::GetPorts(nsTArray>& aPorts) +MessageEvent::GetPorts(Nullable>>& aPorts) { - aPorts = mPorts; + if (!mPortsSet) { + aPorts.SetNull(); + return; + } + + aPorts.SetValue(mPorts); } void MessageEvent::SetPorts(nsTArray>&& aPorts) { - MOZ_ASSERT(mPorts.IsEmpty()); + MOZ_ASSERT(mPorts.IsEmpty() && !mPortsSet); mPorts = Move(aPorts); + mPortsSet = true; } void diff --git a/dom/events/MessageEvent.h b/dom/events/MessageEvent.h index 4e67d44a1f5a..dc8671f1c669 100644 --- a/dom/events/MessageEvent.h +++ b/dom/events/MessageEvent.h @@ -47,7 +47,7 @@ public: void GetLastEventId(nsAString&) const; void GetSource(Nullable& aValue) const; - void GetPorts(nsTArray>& aPorts); + void GetPorts(Nullable>>& aPorts); void SetPorts(nsTArray>&& aPorts); @@ -75,7 +75,7 @@ public: bool aCancelable, JS::Handle aData, const nsAString& aOrigin, const nsAString& aLastEventId, const Nullable& aSource, - const Sequence>& aPorts); + const Nullable>>& aPorts); protected: ~MessageEvent(); @@ -88,6 +88,7 @@ private: RefPtr mPortSource; nsTArray> mPorts; + bool mPortsSet; }; } // namespace dom diff --git a/dom/events/test/test_messageEvent.html b/dom/events/test/test_messageEvent.html index 0402649afdb1..249aa9e8c158 100644 --- a/dom/events/test/test_messageEvent.html +++ b/dom/events/test/test_messageEvent.html @@ -17,7 +17,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=848294 ok(e, "MessageEvent created"); is(e.type, 'message', 'MessageEvent.type is right'); - is(e.data, 'data' in test ? test.data : null, 'MessageEvent.data is ok'); + is(e.data, 'data' in test ? test.data : undefined, 'MessageEvent.data 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.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: channel.port1 }, { data: window, source: channel.port1, ports: [ channel.port1, channel.port2 ] }, - { data: null, ports: [] }, + { data: null, ports: null }, ]; while (tests.length) { @@ -54,11 +54,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=848294 e = new MessageEvent('message'); e.initMessageEvent('message', true, true, - 'data' in test ? test.data : null, + 'data' in test ? test.data : undefined, 'origin' in test ? test.origin : '', 'lastEventId' in test ? test.lastEventId : '', 'source' in test ? test.source : null, - 'ports' in test ? test.ports : []); + 'ports' in test ? test.ports : null); testMessageEvent(e, test); } diff --git a/dom/messagechannel/MessagePort.cpp b/dom/messagechannel/MessagePort.cpp index 425753b30957..75ad14ff21ec 100644 --- a/dom/messagechannel/MessagePort.cpp +++ b/dom/messagechannel/MessagePort.cpp @@ -137,8 +137,7 @@ private: event->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), false /* non-bubbling */, false /* cancelable */, value, EmptyString(), - EmptyString(), nullptr, - Sequence>()); + EmptyString(), nullptr, nullptr); event->SetTrusted(true); event->SetSource(mPort); diff --git a/dom/presentation/PresentationConnection.cpp b/dom/presentation/PresentationConnection.cpp index efb2ee49fbc3..aa27f63cd990 100644 --- a/dom/presentation/PresentationConnection.cpp +++ b/dom/presentation/PresentationConnection.cpp @@ -580,8 +580,7 @@ PresentationConnection::DispatchMessageEvent(JS::Handle aData) messageEvent->InitMessageEvent(nullptr, NS_LITERAL_STRING("message"), false, false, aData, origin, - EmptyString(), nullptr, - Sequence>()); + EmptyString(), nullptr, nullptr); messageEvent->SetTrusted(true); RefPtr asyncDispatcher = diff --git a/dom/webidl/MessageEvent.webidl b/dom/webidl/MessageEvent.webidl index 548f14520b59..65687013d3ac 100644 --- a/dom/webidl/MessageEvent.webidl +++ b/dom/webidl/MessageEvent.webidl @@ -41,18 +41,18 @@ interface MessageEvent : Event { * data, origin, source, and lastEventId attributes of this appropriately. */ [Pure, Cached, Frozen] - readonly attribute sequence ports; + readonly attribute sequence? ports; void initMessageEvent(DOMString type, boolean bubbles, boolean cancelable, any data, DOMString origin, DOMString lastEventId, (WindowProxy or MessagePort)? source, - sequence ports); + sequence? ports); }; dictionary MessageEventInit : EventInit { - any data = null; - DOMString origin = ""; - DOMString lastEventId = ""; + any data; + DOMString origin; + DOMString lastEventId; (Window or MessagePort)? source = null; - sequence ports = []; + sequence? ports; }; diff --git a/dom/workers/WorkerPrivate.cpp b/dom/workers/WorkerPrivate.cpp index b7f8215a7715..7a89b6fdc06a 100644 --- a/dom/workers/WorkerPrivate.cpp +++ b/dom/workers/WorkerPrivate.cpp @@ -723,7 +723,7 @@ public: EmptyString(), EmptyString(), nullptr, - Sequence>()); + nullptr); event->SetPorts(Move(ports)); domEvent = do_QueryObject(event); } @@ -815,7 +815,7 @@ private: EmptyString(), EmptyString(), nullptr, - Sequence>()); + nullptr); event->SetTrusted(true); nsCOMPtr domEvent = do_QueryObject(event);