105 lines
No EOL
2.9 KiB
JavaScript
105 lines
No EOL
2.9 KiB
JavaScript
/* global chrome */
|
|
|
|
import setExtensionIconAndPopup from './setExtensionIconAndPopup';
|
|
import { executeScriptInMainWorld } from './executeScript';
|
|
import { EXTENSION_CONTAINED_VERSIONS } from '../utils';
|
|
export function handleReactDevToolsHookMessage(message, sender) {
|
|
const {
|
|
payload
|
|
} = message;
|
|
switch (payload?.type) {
|
|
case 'react-renderer-attached':
|
|
{
|
|
payload.reactBuildType |> setExtensionIconAndPopup(%, sender.tab.id);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
export function handleBackendManagerMessage(message, sender) {
|
|
const {
|
|
payload
|
|
} = message;
|
|
switch (payload?.type) {
|
|
case 'require-backends':
|
|
{
|
|
(version => {
|
|
if (version |> EXTENSION_CONTAINED_VERSIONS.includes(%)) {
|
|
({
|
|
target: {
|
|
tabId: sender.tab.id
|
|
},
|
|
files: [`/build/react_devtools_backend_${version}.js`]
|
|
}) |> executeScriptInMainWorld(%);
|
|
}
|
|
}) |> payload.versions.forEach(%);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
export function handleDevToolsPageMessage(message) {
|
|
const {
|
|
payload
|
|
} = message;
|
|
switch (payload?.type) {
|
|
// Proxy this message from DevTools page to content script via chrome.tabs.sendMessage
|
|
case 'fetch-file-with-cache':
|
|
{
|
|
const {
|
|
payload: {
|
|
tabId,
|
|
url
|
|
}
|
|
} = message;
|
|
if (!tabId) {
|
|
throw new Error("Couldn't fetch file sources: tabId not specified");
|
|
}
|
|
if (!url) {
|
|
throw new Error("Couldn't fetch file sources: url not specified");
|
|
}
|
|
tabId |> chrome.tabs.sendMessage(%, {
|
|
source: 'devtools-page',
|
|
payload: {
|
|
type: 'fetch-file-with-cache',
|
|
url
|
|
}
|
|
});
|
|
break;
|
|
}
|
|
case 'inject-backend-manager':
|
|
{
|
|
const {
|
|
payload: {
|
|
tabId
|
|
}
|
|
} = message;
|
|
if (!tabId) {
|
|
throw new Error("Couldn't inject backend manager: tabId not specified");
|
|
}
|
|
({
|
|
target: {
|
|
tabId
|
|
},
|
|
files: ['/build/backendManager.js']
|
|
}) |> executeScriptInMainWorld(%);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
export function handleFetchResourceContentScriptMessage(message) {
|
|
const {
|
|
payload
|
|
} = message;
|
|
switch (payload?.type) {
|
|
case 'fetch-file-with-cache-complete':
|
|
case 'fetch-file-with-cache-error':
|
|
// Forward the result of fetch-in-page requests back to the DevTools page.
|
|
// We switch the source here because of inconsistency between Firefox and Chrome
|
|
// In Chromium this message will be propagated from content script to DevTools page
|
|
// For Firefox, only background script will get this message, so we need to forward it to DevTools page
|
|
({
|
|
source: 'react-devtools-background',
|
|
payload
|
|
}) |> chrome.runtime.sendMessage(%);
|
|
break;
|
|
}
|
|
} |