JSTQL-JS-Transform/output_testing/316messageHandlers.js

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;
}
}