Skip to content

Commit

Permalink
refactor: refactored devtools browser extension scripts to improve po…
Browse files Browse the repository at this point in the history
…rts management and service worker lifetime
  • Loading branch information
hoxyq committed Aug 29, 2023
1 parent 41e9c17 commit 10836bc
Show file tree
Hide file tree
Showing 22 changed files with 1,159 additions and 847 deletions.
6 changes: 4 additions & 2 deletions packages/react-devtools-extensions/firefox/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"applications": {
"gecko": {
"id": "@react-devtools",
"strict_min_version": "55.0"
"strict_min_version": "102.0"
}
},
"icons": {
Expand Down Expand Up @@ -41,7 +41,9 @@
"file:///*",
"http://*/*",
"https://*/*",
"clipboardWrite"
"clipboardWrite",
"scripting",
"devtools"
],
"content_scripts": [
{
Expand Down
245 changes: 0 additions & 245 deletions packages/react-devtools-extensions/src/background.js

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/* global chrome */

import {IS_FIREFOX} from '../utils';

async function dynamicallyInjectContentScripts() {
const contentScriptsToInject = [
{
id: '@react-devtools/hook',
js: ['build/installHook.js'],
matches: ['<all_urls>'],
persistAcrossSessions: true,
runAt: 'document_start',
world: chrome.scripting.ExecutionWorld.MAIN,
},
{
id: '@react-devtools/renderer',
js: ['build/renderer.js'],
matches: ['<all_urls>'],
persistAcrossSessions: true,
runAt: 'document_start',
world: chrome.scripting.ExecutionWorld.MAIN,
},
];

try {
const alreadyRegisteredContentScripts =
await chrome.scripting.getRegisteredContentScripts();

const scriptsToInjectNow = contentScriptsToInject.filter(
scriptToInject =>
!alreadyRegisteredContentScripts.some(
registeredScript => registeredScript.id === scriptToInject.id,
),
);

if (scriptsToInjectNow.length) {
// equivalent logic for Firefox is in prepareInjection.js
// Manifest V3 method of injecting content script
// TODO(hoxyq): migrate Firefox to V3 manifests
// Note: the "world" option in registerContentScripts is only available in Chrome v102+
// It's critical since it allows us to directly run scripts on the "main" world on the page
// "document_start" allows it to run before the page's scripts
// so the hook can be detected by react reconciler
await chrome.scripting.registerContentScripts(scriptsToInjectNow);
}
} catch (error) {
console.error(error);
}
}

if (!IS_FIREFOX) {
dynamicallyInjectContentScripts();
}
Loading

0 comments on commit 10836bc

Please sign in to comment.