mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
f37c7bc653
Stacked on https://github.com/facebook/react/pull/30610 and whats under it. See [last commit](https://github.com/facebook/react/pull/30636/commits/248ddba18608e1bb5ef14c823085a7ff9d7a54a3). Now, we are using [`chrome.storage`](https://developer.chrome.com/docs/extensions/reference/api/storage) to persist settings for the browser extension across different sessions. Once settings are updated from the UI, the `Store` will emit `settingsUpdated` event, and we are going to persist them via `chrome.storage.local.set` in `main/index.js`. When hook is being injected, we are going to pass a `Promise`, which is going to be resolved after the settings are read from the storage via `chrome.storage.local.get` in `hookSettingsInjector.js`.
55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
/* global chrome */
|
|
|
|
const contentScriptsToInject = [
|
|
{
|
|
id: '@react-devtools/proxy',
|
|
js: ['build/proxy.js'],
|
|
matches: ['<all_urls>'],
|
|
persistAcrossSessions: true,
|
|
runAt: 'document_end',
|
|
world: chrome.scripting.ExecutionWorld.ISOLATED,
|
|
},
|
|
{
|
|
id: '@react-devtools/file-fetcher',
|
|
js: ['build/fileFetcher.js'],
|
|
matches: ['<all_urls>'],
|
|
persistAcrossSessions: true,
|
|
runAt: 'document_end',
|
|
world: chrome.scripting.ExecutionWorld.ISOLATED,
|
|
},
|
|
{
|
|
id: '@react-devtools/hook',
|
|
js: ['build/installHook.js'],
|
|
matches: ['<all_urls>'],
|
|
persistAcrossSessions: true,
|
|
runAt: 'document_start',
|
|
world: chrome.scripting.ExecutionWorld.MAIN,
|
|
},
|
|
{
|
|
id: '@react-devtools/hook-settings-injector',
|
|
js: ['build/hookSettingsInjector.js'],
|
|
matches: ['<all_urls>'],
|
|
persistAcrossSessions: true,
|
|
runAt: 'document_start',
|
|
},
|
|
];
|
|
|
|
async function dynamicallyInjectContentScripts() {
|
|
try {
|
|
// Using this, instead of filtering registered scrips with `chrome.scripting.getRegisteredScripts`
|
|
// because of https://bugs.chromium.org/p/chromium/issues/detail?id=1393762
|
|
// This fixes registering proxy content script in incognito mode
|
|
await chrome.scripting.unregisterContentScripts();
|
|
|
|
// 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(contentScriptsToInject);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
}
|
|
|
|
dynamicallyInjectContentScripts();
|