/** * part of Hachette * Informing about activities performed by content script (script injection, * script blocking). * * Copyright (C) 2021 Wojtek Kosior * Redistribution terms are gathered in the `copyright' file. */ /* * IMPORTS_START * IMPORT listen_for_connection * IMPORT CONNECTION_TYPE * IMPORT set_repo_query_repos * IMPORT set_repo_query_callback * IMPORTS_END */ var activities = []; var ports = new Set(); function report_activity(name, data) { const activity = [name, data]; activities.push(activity); for (const port of ports) port.postMessage(activity); } function report_script(script_data) { report_activity("script", script_data); } function report_settings(settings) { const [pattern, settings_data, repos] = settings; set_repo_query_repos(repos); report_activity("settings", settings); } function report_repo_query_result(result) { report_activity("repo_query_result", result); } function trigger_repo_query() { set_repo_query_callback(report_repo_query_result); } function new_connection(port) { console.log("new activity info connection!"); ports.add(port); for (const activity of activities) port.postMessage(activity); /* * So far the only thing we expect to receive is repo query order. Once more * possibilities arrive, we will need to complicate this listener. */ port.onMessage.addListener(trigger_repo_query); port.onDisconnect.addListener(() => ports.delete(port)); } function start_activity_info_server() { listen_for_connection(CONNECTION_TYPE.ACTIVITY_INFO, new_connection); } /* * EXPORTS_START * EXPORT start_activity_info_server * EXPORT report_script * EXPORT report_settings * EXPORTS_END */