import React, { Fragment } from 'react'; import ReactDOM from 'react-dom'; import { useEmitter } from '../../util'; import { getMemory } from '../../memory'; async function getCurrentTab() { const [tab] = await browser.tabs.query({ active: true, windowId: browser.windows.WINDOW_ID_CURRENT, }); return tab; } import './../../styles/global.scss'; import './toolbar.scss'; const Toolbar = () => { const [origin, setOrigin] = React.useState(null); const [stolenDataView, setStolenDataView] = React.useState(true); const [eventCounts, setEventCounts] = useEmitter(getMemory()); const [cookieDomainCopy, setCookieDomainCopy] = React.useState(null); const [marksOccurrence, setMarksOccurrence] = React.useState(false); const [exposedOriginDomainCopy, setExposedOriginDomainCopy] = React.useState( null ); React.useEffect(() => { const listener = async () => { const tab = await getCurrentTab(); if (tab !== undefined) { const url = new URL(tab.url); if (url.origin.startsWith('moz-extension')) { return; } setOrigin(url.origin); } else { console.warn('Out of the tab scope'); } }; browser.tabs.onUpdated.addListener(listener); listener(); return () => { browser.tabs.onUpdated.removeListener(listener); }; }); React.useEffect(() => { const exposedOriginDomains = Object.values(getMemory().getClustersForOrigin(origin)) .filter((cluster) => cluster.exposesOrigin()) .map((cluster) => cluster.id); setExposedOriginDomainCopy(''); const first_sentence = `Strona ${origin} wysłała informacje o części Twojej historii przeglądania do `; switch (exposedOriginDomains.length) { case 0: return null; case 1: return setExposedOriginDomainCopy(first_sentence + `${exposedOriginDomains[0]}.`); case 2: return setExposedOriginDomainCopy( first_sentence + `${exposedOriginDomains[0]} oraz ${exposedOriginDomains[1]}.` ); case 3: return setExposedOriginDomainCopy( first_sentence + `${exposedOriginDomains[0]}, ${exposedOriginDomains[1]} oraz ${exposedOriginDomains[2]}.` ); default: return setExposedOriginDomainCopy( first_sentence + `${exposedOriginDomains[0]}, ${exposedOriginDomains[1]} (i ${ exposedOriginDomains.length - 2 < 2 ? 2 : exposedOriginDomains.length - 2 } innych).` ); } }, [eventCounts['*'], origin]); React.useEffect(() => { const cookieDomains = Object.values(getMemory().getClustersForOrigin(origin)) .filter((cluster) => cluster.hasCookies()) .map((cluster) => cluster.id); setCookieDomainCopy(''); const first_sentence = `Strona ${origin} dokonała zapisu i odczytu plików Cookie dla domen `; switch (cookieDomains.length) { case 0: return null; case 1: return setCookieDomainCopy(first_sentence + `${cookieDomains[0]}.`); case 2: return setCookieDomainCopy( first_sentence + `${cookieDomains[0]} oraz ${cookieDomains[1]}.` ); case 3: return setCookieDomainCopy( first_sentence + `${cookieDomains[0]}, ${cookieDomains[1]} oraz ${cookieDomains[2]}.` ); default: return setCookieDomainCopy( first_sentence + `${cookieDomains[0]}, ${cookieDomains[1]} (i ${ cookieDomains.length - 2 < 2 ? 2 : cookieDomains.length - 2 } innych).` ); } }, [eventCounts['*'], origin]); React.useEffect(() => { for (const cluster of Object.values(getMemory().getClustersForOrigin(origin))) { if (cluster.hasMarks()) { return setMarksOccurrence(true); } } return setMarksOccurrence(false); }, [eventCounts['*']]); function autoMark() { for (const cluster of Object.values(getMemory().getClustersForOrigin(origin))) { cluster.autoMark(); } return setMarksOccurrence(true); } return (
{origin ? ( <> Analiza strony {origin} ) : ( Przejdź do wybranej strony internetowej )}
{stolenDataView ? ( ) : ( )}
{ Object.values(getMemory().getClustersForOrigin(origin)).filter( (cluster) => cluster.exposesOrigin() ).length }
{ Object.values(getMemory().getClustersForOrigin(origin)).filter( (cluster) => cluster.hasCookies() ).length }
{Object.values(getMemory().getClustersForOrigin(origin)).length}
Liczba wykrytych domen podmiotów trzecich

cluster.exposesOrigin()) .map((domain) => domain.id) .join(', ')} > {exposedOriginDomainCopy}

cluster.hasCookies()) .map((domain) => domain.id) .join(', ')} > {cookieDomainCopy}

{exposedOriginDomainCopy !== null || cookieDomainCopy !== null ? (

Takie przetwarzanie danych może być niezgodne z prawem. Kliknij w przycisk „Generuj raport”, aby pomóc ustalić, czy ta strona nie narusza RODO.

) : null}
); }; ReactDOM.render(, document.getElementById('toolbar'));