const messageType = { EXECUTE_SCRIPT: 'EXECUTE_SCRIPT', RUN_AXS: 'RUN_AXS', AXS_COMPLETE: 'AXS_COMPLETE', HIGHLIGHT_WARNING: 'HIGHLIGHT_WARNING', UNHIGHLIGHT_WARNING: 'UNHIGHLIGHT_WARNING', HIGHLIGHT_REPORT: 'HIGHLIGHT_REPORT', UNHIGHLIGHT_REPORT: 'UNHIGHLIGHT_REPORT', TRACE_TAB_PATH: 'TRACE_TAB_PATH', PNG_TAB_PATH: 'PNG_TAB_PATH', CLEAR_AXS: 'CLEAR_AXS' } const auditDir = 'audit'; const tracerDir = 'tracer'; var devtools = null; const devToolsListener = function(message, sender, sendResponse) { switch (message.type) { case messageType.EXECUTE_SCRIPT: { const { scriptToInject } = message.data; // Inject a content script into the active tab chrome.tabs.executeScript({file: scriptToInject}); break; } case messageType.RUN_AXS: { chrome.tabs.executeScript({ file: `${auditDir}/axs_testing.js` }); chrome.tabs.executeScript({ file: `${auditDir}/run_axs.js` }); break; } case messageType.CLEAR_AXS: { chrome.tabs.executeScript({ file: `${auditDir}/clear_axs.js`}) break; } case messageType.AXS_COMPLETE: { const { result, idToWarningsMap } = message.data; if (devtools) { devtools.postMessage({ type: 'AXS_SHOW_RESULTS', data: { idToWarningsMap: idToWarningsMap } }) } break; } case messageType.HIGHLIGHT_WARNING: { const { warningId } = message.data; chrome.tabs.sendMessage({ type: messageType.HIGHLIGHT_WARNING, data: { warningId: warningId } }) break; } case messageType.UNHIGHLIGHT_WARNING: { const { warningId } = message.data; chrome.tabs.sendMessage({ type: messageType.UNHIGHLIGHT_WARNING, data: { warningId: warningId } }) break; } case messageType.HIGHLIGHT_REPORT: { const { warningId } = message.data; if (devtools) { devtools.postMessage({ type: messageType.HIGHLIGHT_REPORT, data: { warningId: warningId } }) } break; } case messageType.UNHIGHLIGHT_REPORT: { const { warningId } = message.data; if (devtools) { devtools.postMessage({ type: messageType.UNHIGHLIGHT_REPORT, data: { warningId: warningId } }) } break; } case messageType.TRACE_TAB_PATH: { chrome.tabs.executeScript({ file: `${tracerDir}/trace_tab_path.js` }); break; } case messageType.PNG_TAB_PATH: { chrome.tabs.executeScript({ file: `${tracerDir}/html2canvas.js` }); chrome.tabs.executeScript({ file: `${tracerDir}/png_tab_path.js` }); break; } default: { console.log(message); return null; } } } // might need to change this to be inside onConnect, and on devtools side // pass the port to panel chrome.runtime.onMessage.addListener(devToolsListener); chrome.runtime.onConnect.addListener(function(devToolsConnection) { // devToolsConnection.onMessage.addListener(devToolsListener); devtools = devToolsConnection; // assign the listener function to a variable so we can remove it later // add the listener })