1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 05:47:34 +00:00

LibWeb: Make Window.postMessage closer to the spec

The main issues are using Structured{Serialize,Deserailize} instead of
Structured{Serialize,Deserialize}WithTransfer and the temporary
execution context usage for StructuredDeserialize.

Allows Discord to load once again, as it uses a postMessage scheduler
to render components, including the main App component. The callback
checked the (previously) non-existent source attribute of the
MessageEvent and returned if it was not the main window.

Fixes the Twitch cookie consent banner saying "failed integrity check"
for unknown reasons, but presumably related to the source and origin
attributes.
This commit is contained in:
Luke Wilde 2023-11-06 20:22:56 +00:00 committed by Andreas Kling
parent 464cc55b16
commit fc42c75a0c
5 changed files with 361 additions and 13 deletions

View file

@ -0,0 +1,100 @@
originError instanceof DOMException: true
originError.name: SyntaxError
originError.message: Invalid URL for targetOrigin: 'aaaa'
originError.constructor === window.DOMException: true
originParsedBeforeSerializeError instanceof DOMException: true
originParsedBeforeSerializeError.name: SyntaxError
originParsedBeforeSerializeError.message: Invalid URL for targetOrigin: 'aaaa'
originParsedBeforeSerializeError.constructor === window.DOMException: true
serializeError instanceof DOMException: true
serializeError.name: DataCloneError
serializeError.message: Unsupported type
serializeError.constructor === window.DOMException: true
originIframeError instanceof DOMException: false
originIframeError instanceof iframe.contentWindow.DOMException: true
originIframeError.name: SyntaxError
originIframeError.message: Invalid URL for targetOrigin: 'aaaa'
originIframeError.constructor === DOMException: false
originIframeError.constructor === iframe.contentWindow.DOMException: true
originParsedBeforeSerializeIframeError instanceof DOMException: false
originParsedBeforeSerializeIframeError instanceof iframe.contentWindow.DOMException: true
originParsedBeforeSerializeIframeError.name: SyntaxError
originParsedBeforeSerializeIframeError.message: Invalid URL for targetOrigin: 'aaaa'
originParsedBeforeSerializeIframeError.constructor === DOMException: false
originParsedBeforeSerializeIframeError.constructor === iframe.contentWindow.DOMException: true
serializeIframeError instanceof DOMException: false
serializeIframeError instanceof iframe.contentWindow.DOMException: true
serializeIframeError.name: DataCloneError
serializeIframeError.message: Unsupported type
serializeIframeError.constructor === DOMException: false
serializeIframeError.constructor === iframe.contentWindow.DOMException: true
Message 1 data: undefined
Message 1 origin: file://
Message 1 lastEventId:
Message 1 source: [object Window]
Message 1 source === window: true
Message 1 source === iframe.contentWindow: false
Message 1 source === blobIframe.contentWindow: false
Message 2 data: null
Message 2 origin: file://
Message 2 lastEventId:
Message 2 source: [object Window]
Message 2 source === window: true
Message 2 source === iframe.contentWindow: false
Message 2 source === blobIframe.contentWindow: false
Message 3 data: true
Message 3 origin: file://
Message 3 lastEventId:
Message 3 source: [object Window]
Message 3 source === window: true
Message 3 source === iframe.contentWindow: false
Message 3 source === blobIframe.contentWindow: false
Message 4 data: false
Message 4 origin: file://
Message 4 lastEventId:
Message 4 source: [object Window]
Message 4 source === window: true
Message 4 source === iframe.contentWindow: false
Message 4 source === blobIframe.contentWindow: false
Message 5 data: 123
Message 5 origin: file://
Message 5 lastEventId:
Message 5 source: [object Window]
Message 5 source === window: true
Message 5 source === iframe.contentWindow: false
Message 5 source === blobIframe.contentWindow: false
Message 6 data: 123.456
Message 6 origin: file://
Message 6 lastEventId:
Message 6 source: [object Window]
Message 6 source === window: true
Message 6 source === iframe.contentWindow: false
Message 6 source === blobIframe.contentWindow: false
Message 7 data: 9007199254740991
Message 7 origin: file://
Message 7 lastEventId:
Message 7 source: [object Window]
Message 7 source === window: true
Message 7 source === iframe.contentWindow: false
Message 7 source === blobIframe.contentWindow: false
Message 8 data: This is a string
Message 8 origin: file://
Message 8 lastEventId:
Message 8 source: [object Window]
Message 8 source === window: true
Message 8 source === iframe.contentWindow: false
Message 8 source === blobIframe.contentWindow: false
Message 9 data: I am from another ~planet~ iframe
Message 9 origin: file://
Message 9 lastEventId:
Message 9 source: [object Window]
Message 9 source === window: false
Message 9 source === iframe.contentWindow: true
Message 9 source === blobIframe.contentWindow: false
Message 10 data: All done :^)
Message 10 origin: file://
Message 10 lastEventId:
Message 10 source: [object Window]
Message 10 source === window: false
Message 10 source === iframe.contentWindow: false
Message 10 source === blobIframe.contentWindow: true