ported mozilla patches:

- Bug 848294 - Update MessageEvent to be compatible with the spec, r=bz
- Bug 913761 - Something is wrong when transferring MessagePort object via MessageChannel. r=smaug
- Bug 917254 - Only enable MessageEvent.ports when MessagePort is enabled; r=smaug
This commit is contained in:
2018-08-26 00:35:59 +08:00
parent 366f2c3245
commit 43b0deedf0
18 changed files with 376 additions and 62 deletions
+6 -4
View File
@@ -110,7 +110,8 @@ PostMessageReadStructuredClone(JSContext* cx,
uint32_t data,
void* closure)
{
NS_ASSERTION(closure, "Must have closure!");
StructuredCloneInfo* scInfo = static_cast<StructuredCloneInfo*>(closure);
NS_ASSERTION(scInfo, "Must have scInfo!");
if (tag == SCTAG_DOM_BLOB || tag == SCTAG_DOM_FILELIST) {
NS_ASSERTION(!data, "Data should be empty");
@@ -139,6 +140,7 @@ PostMessageReadStructuredClone(JSContext* cx,
if (global) {
JS::Rooted<JSObject*> obj(cx, port->WrapObject(cx, global));
if (JS_WrapObject(cx, obj.address())) {
port->BindToOwner(scInfo->mPort->GetOwner());
return obj;
}
}
@@ -191,7 +193,7 @@ PostMessageWriteStructuredClone(JSContext* cx,
MessagePort* port = nullptr;
nsresult rv = mozilla::dom::UnwrapObject<MessagePort>(cx, obj, port);
if (NS_SUCCEEDED(rv)) {
nsRefPtr<MessagePort> newPort = port->Clone(scInfo->mPort->GetOwner());
nsRefPtr<MessagePort> newPort = port->Clone();
return JS_WriteUint32Pair(writer, SCTAG_DOM_MESSAGEPORT, 0) &&
JS_WriteBytes(writer, &newPort, sizeof(newPort)) &&
@@ -455,9 +457,9 @@ MessagePort::Entangle(MessagePort* aMessagePort)
}
already_AddRefed<MessagePort>
MessagePort::Clone(nsPIDOMWindow* aWindow)
MessagePort::Clone()
{
nsRefPtr<MessagePort> newPort = new MessagePort(aWindow->GetCurrentInnerWindow());
nsRefPtr<MessagePort> newPort = new MessagePort(nullptr);
// Move all the events in the port message queue of original port.
newPort->mMessageQueue.SwapElements(mMessageQueue);