Skip to content

Commit 7df1d86

Browse files
Brian Vaughnrickhanlonii
Brian Vaughn
authored andcommitted
DevTools bugfix: Ignore duplicate welcome "message" events (#24186)
1 parent 0ea7b38 commit 7df1d86

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

packages/react-devtools-extensions/src/backend.js

+21
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
'use strict';
88

9+
let welcomeHasInitialized = false;
10+
911
function welcome(event) {
1012
if (
1113
event.source !== window ||
@@ -14,6 +16,25 @@ function welcome(event) {
1416
return;
1517
}
1618

19+
// In some circumstances, this method is called more than once for a single welcome message.
20+
// The exact circumstances of this are unclear, though it seems related to 3rd party event batching code.
21+
//
22+
// Regardless, call this method multiple times can cause DevTools to add duplicate elements to the Store
23+
// (and throw an error) or worse yet, choke up entirely and freeze the browser.
24+
//
25+
// The simplest solution is to ignore the duplicate events.
26+
// To be clear, this SHOULD NOT BE NECESSARY, since we remove the event handler below.
27+
//
28+
// See https://github.com/facebook/react/issues/24162
29+
if (welcomeHasInitialized) {
30+
console.warn(
31+
'React DevTools detected duplicate welcome "message" events from the content script.',
32+
);
33+
return;
34+
}
35+
36+
welcomeHasInitialized = true;
37+
1738
window.removeEventListener('message', welcome);
1839

1940
setup(window.__REACT_DEVTOOLS_GLOBAL_HOOK__);

packages/react-devtools-extensions/src/contentScript.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ function handleMessageFromDevtools(message) {
2525
);
2626
}
2727

28-
function handleMessageFromPage(evt) {
28+
function handleMessageFromPage(event) {
2929
if (
30-
evt.source === window &&
31-
evt.data &&
32-
evt.data.source === 'react-devtools-bridge'
30+
event.source === window &&
31+
event.data &&
32+
event.data.source === 'react-devtools-bridge'
3333
) {
3434
backendInitialized = true;
3535

36-
port.postMessage(evt.data.payload);
36+
port.postMessage(event.data.payload);
3737
}
3838
}
3939

0 commit comments

Comments
 (0)