Bug #93270

BroadcastMessage.fromData() is not idempotent

Added by Benjamin Franzke 6 months ago. Updated 6 days ago.

Status:
Under Review
Priority:
Should have
Assignee:
-
Category:
Backend JavaScript
Target version:
Start date:
2021-01-12
Due date:
% Done:

0%

Estimated time:
TYPO3 Version:
11
PHP Version:
Tags:
Complexity:
Is Regression:
Sprint Focus:

Description

If BroadcastMessage is recreated using BroadcastMessage.fromData() it does not retain the original object structure. This is because BroadcastMessage.fromData() nests the entrire data (which includes a payload property itself) into another wrapping payload property.

Given following JavaScript code (executable in a Browser console in a window of the TYPO3 Backend):

window.require(['TYPO3/CMS/Backend/BroadcastMessage'], ({BroadcastMessage}) => {
  const bm1 = new BroadcastMessage('component', 'eventName', {foo: 'bar'})
  // Create bm2 from bm1, as if bm1 has been sent via broadcastchannel
  const bm2 = BroadcastMessage.fromData(bm1)
  console.log('bm1', bm1.payload)
  console.log('bm2', bm2.payload)
})

The expected result/output is that payload contains the same value for both BroadcastMessage instances:

bm1 {foo: "bar"}
bm2 {foo: "bar"}

While it actually is:

bm1 {foo: "bar"}
bm2 {payload: {foo: "bar"}}

BroadcastMessage.fromData() should be fixed to be idempotent, while keeping backwards compatibility (to existing event-subscribers) by doing the "additional" payload wrapping in BroadcastMessage.createCustomEvent. The "good" thing is, that BroadcastMessage isn't used directly by subscribers, it is transformed into a CustomEvent, therefore this can be fixed without breaking BC.

#1

Updated by Benjamin Franzke 6 months ago

  • Description updated (diff)
#2

Updated by Gerrit Code Review 6 months ago

  • Status changed from New to Under Review

Patch set 1 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/67432

#3

Updated by Gerrit Code Review 6 months ago

Patch set 2 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/67432

#4

Updated by Gerrit Code Review 6 months ago

Patch set 3 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/67432

#5

Updated by Gerrit Code Review 6 months ago

Patch set 4 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/67432

#6

Updated by Benni Mack 5 months ago

  • Target version changed from 11.1 to 11.2
#7

Updated by Gerrit Code Review 5 months ago

Patch set 5 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/c/Packages/TYPO3.CMS/+/67432

#8

Updated by Benni Mack 3 months ago

  • Target version changed from 11.2 to 11.3
#9

Updated by Benni Mack 6 days ago

  • Target version changed from 11.3 to 11.4

Also available in: Atom PDF