Commit a226f870 authored by Oncela's avatar Oncela
Browse files

Upload New File

parent bccc56fe
// Étape #4 : affiche à l'écran les informations transmises par tabs.js
var popup = {}
// Liste des entreprises
popup.companies = [];
// Durée d'affichage en seconde (infini si 0)
popup.timer = 6;
// État d'initialisation
popup.ready = false;
/* ==== Réception des messages ==== /*/
// Reçoit un message de tabs.js
browser.runtime.onMessage.addListener( function (message)
{
// S'il s'agit du message d'initialisation, lance l'initialisation
if (message.type == "init")
popup.init(message.content);
// S'il s'agit d'un message de mise à jour, met à jour les informations et l'affichage
if (message.type == "update")
popup.update(message.content);
});
/* ==== Initialisation ==== /*/
// Dès que le script est lancé, signale à tabs.js qu'il est prêt à s'initialiser
browser.runtime.sendMessage("ready");
// Réceptionnes les informations d’initialisation envoyée par tabs.js
popup.init = function(info)
{
// Initialise les informations pour chaque entreprise
for (var i = 0; i < info.companies.titles.length; i++)
{
this.addCompany(info.companies.titles[i], info.companies.colors[i]);
}
// Met à jour les informations à partir de chacune des requêtes reçues
for (var i = 0; i < info.requests.length; i++)
{
this.update(info.requests[i]);
}
// Indique que l'affichage est prêt à ce mettre à jour
this.ready = true;
// Met à jour l'affichage
for (var i = 0; i < this.companies.length; i++)
this.updateFlag(i);
}
// Ajoute une entreprise à la liste, en lui attribuant un nom et une couleur
popup.addCompany = function (name, color)
{
this.companies.push(
{
title: name, // Nom de l'entreprise
color: color, // Couleur du drapeau
domains: {content:[], count:[]}, // Nom des domaines d'où viennent les requêtes, et nombre de requêtes associées
types: {content:[], count:[]}, // Types de ressources proposées par les requêtes, et nombre de requêtes associées
details: "", // Liste des requêtes, en détail
flag: 0, // Élément HTML du drapeau
});
}
/* ==== Mises à jour ==== /*/
// Répartit les mises à jour à faire
popup.update = function (info)
{
// Si l'entreprise concernée par la requête n'en a encore aucune de listée, initialise son drapeau
if (this.companies[info.index].domains.content.length == 0)
this.initFlag(info.index);
// Met à jour les informations à afficher à l'utilisateur
this.updateInfo(info);
// Met à jour la liste détaillée des requêtes
this.updateDetails(info);
// Si le script est initialisé
if (this.ready)
// Met à jour l'affichage
this.updateFlag(info.index);
}
// Met à jour les informations à afficher
popup.updateInfo = function (info)
{
// Pour chaque type d'information à traiter
var lists = ["domains", "types"];
var units = ["domain", "type" ];
for (var i = 0; i < 2; i++)
{
// La liste à modifier
var list = this.companies[info.index][lists[i]];
// L'information à ajouter
var unit = info[units[i]];
// Si cette information n'a jamais été listée
if (list.content.indexOf(unit) == -1)
{
// L'ajoute à la liste et créé son compteur à 1
list.content.push(unit);
list.count.push(1);
}
// Si cette information est déjà listée, incrémente son compteur
else
{
list.count[list.content.indexOf(unit)] ++;
}
}
}
// Met à jours le détail des requêtes
popup.updateDetails = function (info)
{
// Convertit la date
var date = new Date(info.date).toLocaleString();
// Raccourci l'url
var url = info.url;
if (url.length > 150) url = url.substr(0,150) + " [&hellip;]";
// Ajoute une ligne de texte
this.companies[info.index].details += "<u>" + date +"</u> <b>" + info.type + "</b> <i>" + url + "</i><br>";
}
/* ==== Initialisation de l'affichage ==== /*/
// Prépare un drapeau
popup.initFlag = function(index)
{
this.newFlag(index);
if (!document.hidden)
{
this.launchFlag(index);
}
else
{
document.addEventListener('visibilitychange', function(e) {if (!document.hidden) popup.launchFlag(index);});
}
}
// Créé un drapeau
popup.newFlag = function(index)
{
// Créé l'élément HTML
var div = document.createElement("div");
div.innerHTML = "<b>" + this.companies[index].title +" sait</b> que tu es <br> en train de visiter ce site";
div.className = "flag";
div.style.backgroundColor = this.companies[index].color;
div.style.top = 60 + 80 * index + "px";
// Créer un sous-élément HTML (l’infobulle)
div.bubble = document.createElement("div");
div.bubble.className = "bubble";
div.bubble.style.backgroundColor = this.companies[index].color;
div.appendChild(div.bubble);
document.body.appendChild(div);
this.companies[index].flag = div;
}
// Affiche un drapeau
popup.launchFlag = function(index)
{
setTimeout
(
function(div){div.className += " show";},
10,
this.companies[index].flag
);
if (this.timer)
{
setTimeout
(
function(div){div.className = "flag";},
1000 * this.timer,
this.companies[index].flag
);
}
}
/* ==== Mise à jour de l'affichage ==== /*/
popup.updateFlag = function(index)
{
var company = this.companies[index];
// Début du texte
var text = "<b>" + company.title + "</b> t'a envoyé :";
// Liste des ressources demandées
for (var i = 0; i < company.types.content.length; i++)
{
var type = company.types.content[i];
var count = company.types.count[i];
var plural = company.types.count[i] > 1 ? "s" : "";
text += "<br>- <b>" + count + "</b> " + type + plural;
}
text += "<br><br>à partir des adresses suivantes :";
// Liste des noms de domaines émetteurs des ressources
for (var i = 0; i < company.domains.content.length; i++)
{
var domain = company.domains.content[i];
var count = company.domains.count[i];
var plural = company.domains.count[i] > 1 ? "s" : "";
text += "<br>- " + domain;
// text += " (" + count + " transfert" + plural + ")";
}
// Détails des requêtes
text += "<br><br><u class='details_button'>Détails&hellip;</u><div class='details'>" + company.details + "</div>";
// URL de la page visitée
var url = window.location.href;
url = url.substring(url.indexOf("://")+3, url.length-1);
if (url.indexOf("www.") != -1)
url = url.substr(url.indexOf("www.")+4);
if (url.length > 50)
url = url.substr(0,50) + "&hellip;";
text += "<br><br>Cela a notamment permis à " + company.title + " de connaître ton <b>adresse IP</b> et l'<b>adresse de la page</b> que tu visites : <code>"+url+"</code><br>";
// text += "<br>Ceci place ta vie privée en grave danger.<br>"
// text += "<br>Le site que tu consultes est <b>responsable</b> de cette situation : c'est lui qui a permis à " + company.title + " d'obtenir ces informations.<br>";
// text += "<br>Ceci est <b>strictement interdit</b>, à moins que tu n'aies préalablement donné ton <b>consentement explicite</b> à ce que " + company.title + " puisse obtenir ces informations (en cliquant sur un bouton « j'accepte de pouvoir être surveillé par " + company.title + " sur le présent site », par exemple, ou en recherchant activement à interagir avec un contenu fourni par " + company.title + " - une vidéo, un bouton de réseau social, etc.). <br>";
// text += "<br><a href='https://gafam.info'>Clic ici</a> pour découvrir comment te défendre";
company.flag.bubble.innerHTML = text;
}
/* ==== */
retrunedValue = true;
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment