Skip to content
This repository has been archived by the owner on Aug 4, 2022. It is now read-only.

Commit

Permalink
Bug 1359017 - onmessageerror for MessagePort in case StructuredClone …
Browse files Browse the repository at this point in the history
…algorithm fails when deserializing, r=masayuki, r=smaug
  • Loading branch information
bakulf committed Sep 12, 2017
1 parent 80d586f commit 46300eb
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 2 deletions.
1 change: 1 addition & 0 deletions dom/base/nsGkAtomList.h
Original file line number Diff line number Diff line change
Expand Up @@ -920,6 +920,7 @@ GK_ATOM(onloadingerror, "onloadingerror")
GK_ATOM(onpopstate, "onpopstate")
GK_ATOM(only, "only") // this one is not an event
GK_ATOM(onmessage, "onmessage")
GK_ATOM(onmessageerror, "onmessageerror")
GK_ATOM(onmousedown, "onmousedown")
GK_ATOM(onmouseenter, "onmouseenter")
GK_ATOM(onmouseleave, "onmouseleave")
Expand Down
19 changes: 17 additions & 2 deletions dom/messagechannel/MessagePort.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -694,7 +694,7 @@ MessagePort::Entangled(nsTArray<ClonedMessageData>& aMessages)
FallibleTArray<RefPtr<SharedMessagePortMessage>> data;
if (NS_WARN_IF(!SharedMessagePortMessage::FromMessagesToSharedChild(aMessages,
data))) {
// OOM, we cannot continue.
DispatchError();
return;
}

Expand Down Expand Up @@ -748,7 +748,7 @@ MessagePort::MessagesReceived(nsTArray<ClonedMessageData>& aMessages)
FallibleTArray<RefPtr<SharedMessagePortMessage>> data;
if (NS_WARN_IF(!SharedMessagePortMessage::FromMessagesToSharedChild(aMessages,
data))) {
// OOM, We cannot continue.
DispatchError();
return;
}

Expand Down Expand Up @@ -1004,5 +1004,20 @@ MessagePort::ForceClose(const MessagePortIdentifier& aIdentifier)
ForceCloseHelper::ForceClose(aIdentifier);
}

void
MessagePort::DispatchError()
{
MessageEventInit init;
init.mBubbles = false;
init.mCancelable = false;

RefPtr<Event> event =
MessageEvent::Constructor(this, NS_LITERAL_STRING("messageerror"), init);
event->SetTrusted(true);

bool dummy;
DispatchEvent(event, &dummy);
}

} // namespace dom
} // namespace mozilla
4 changes: 4 additions & 0 deletions dom/messagechannel/MessagePort.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ class MessagePort final : public DOMEventTargetHelper

void SetOnmessage(EventHandlerNonNull* aCallback);

IMPL_EVENT_HANDLER(messageerror)

// Non WebIDL methods

void UnshippedEntangle(MessagePort* aEntangledPort);
Expand Down Expand Up @@ -147,6 +149,8 @@ class MessagePort final : public DOMEventTargetHelper
// Dispatch events from the Message Queue using a nsRunnable.
void Dispatch();

void DispatchError();

void StartDisentangling();
void Disentangle();

Expand Down
1 change: 1 addition & 0 deletions dom/webidl/MessagePort.webidl
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,6 @@ interface MessagePort : EventTarget {

// event handlers
attribute EventHandler onmessage;
attribute EventHandler onmessageerror;
};
// MessagePort implements Transferable;

0 comments on commit 46300eb

Please sign in to comment.