/** * This file is part of Haketilo. * * Function: Informing the popup about what happens in the content script * (script injection, script blocking, etc.). * * Copyright (C) 2021 Wojtek Kosior * Redistribution terms are gathered in the `copyright' file. */ /* * IMPORTS_START * IMPORT listen_for_connection * IMPORT CONNECTION_TYPE * IMPORT repo_query * IMPORT subscribe_repo_query_results * IMPORT unsubscribe_repo_query_results * IMPORTS_END */ var activities = []; var ports = new Set(); function report_activity_oneshot(name, data, port) { port.postMessage([name, data]); } 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) { report_activity("settings", settings); } function report_document_type(is_html) { report_activity("is_html", is_html); } function report_repo_query_action(update, port) { report_activity_oneshot("repo_query_action", update, port); } function trigger_repo_query(query_specifier) { repo_query(...query_specifier); } function handle_disconnect(port, report_action) { ports.delete(port) unsubscribe_repo_query_results(report_action); } function new_connection(port) { console.log("new activity info connection!"); ports.add(port); for (const activity of activities) port.postMessage(activity); const report_action = u => report_repo_query_action(u, port); subscribe_repo_query_results(report_action); /* * 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(() => handle_disconnect(port, report_action)); } 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 * EXPORT report_document_type * EXPORTS_END */