/** * Myext handling of page actions in content scripts * * Copyright (C) 2021 Wojtek Kosior * * This code is dual-licensed under: * - Asshole license 1.0, * - GPLv3 or (at your option) any later version * * "dual-licensed" means you can choose the license you prefer. * * This code is released under a permissive license because I disapprove of * copyright and wouldn't be willing to sue a violator. Despite not putting * this code under copyleft (which is also kind of copyright), I do not want * it to be made proprietary. Hence, the permissive alternative to GPL is the * Asshole license 1.0 that allows me to call you an asshole if you use it. * This means you're legally ok regardless of how you utilize this code but if * you make it into something nonfree, you're an asshole. * * You should have received a copy of both GPLv3 and Asshole license 1.0 * together with this code. If not, please see: * - https://www.gnu.org/licenses/gpl-3.0.en.html * - https://koszko.org/asshole-license.txt */ "use strict"; (() => { const CONNECTION_TYPE = window.CONNECTION_TYPE; const browser = window.browser; var port; var loaded = false; var scripts_awaiting = []; var nonce; function handle_message(message) { console.log(["message", message]); if (message.inject === undefined) return; for (let script_text of message.inject) { if (loaded) add_script(script_text); else scripts_awaiting.push(script_text); } } function document_loaded(event) { console.log("loaded"); loaded = true; for (let script_text of scripts_awaiting) add_script(script_text); scripts_awaiting = undefined; } function add_script(script_text) { let script = document.createElement("script"); script.textContent = script_text; script.setAttribute("nonce", nonce); document.body.appendChild(script); } function handle_page_actions(script_nonce) { document.addEventListener("DOMContentLoaded", document_loaded); port = browser.runtime.connect({name : CONNECTION_TYPE.PAGE_ACTIONS}); port.onMessage.addListener(handle_message); port.postMessage({url: document.URL}); nonce = script_nonce; } window.handle_page_actions = handle_page_actions; })();