(patch)[DevTools] bug fix: backend injection logic not working for undocked devtools window (#26665)
bugfix for #26492 This bug would cause users unable to use the devtools (component tree empty). The else-if logic is broken when user switch to undocked devtools mode (separate window) because `sender.tab` would exist in that case. <img width="314" alt="image" src="https://user-images.githubusercontent.com/1001890/232930094-05a74445-9189-4d50-baf1-a0360b29ef7e.png"> Tested on Chrome with a local build
Mengdi Chen committed
Apr 18, 2023 at 20:39 UTC
96fd2fb726130d2980e6d450f5d9e468f922b8b9
1 file changed
+5
-1
packages/react-devtools-extensions/src/background.js
+5
-1
@@ -172,6 +172,7 @@ chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
172
173
chrome.runtime.onMessage.addListener((request, sender) => {
174
const tab = sender.tab;
175
+ // sender.tab.id from content script points to the tab that injected the content script
176
if (tab) {
177
const id = tab.id;
178
// This is sent from the hook content script.
@@ -214,7 +215,10 @@ chrome.runtime.onMessage.addListener((request, sender) => {
215
break;
216
}
217
}
217
- } else if (request.payload?.tabId) {
218
+ }
219
+ // sender.tab.id from devtools page may not exist, or point to the undocked devtools window
220
+ // so we use the payload to get the tab id
221
+ if (request.payload?.tabId) {
222
const tabId = request.payload?.tabId;
223
// This is sent from the devtools page when it is ready for injecting the backend
224
if (request.payload.type === 'react-devtools-inject-backend-manager') {