diff --git a/src/js/ui/tab_cookies.js b/src/js/ui/tab_cookies.js index bc7a060..ac52fe0 100644 --- a/src/js/ui/tab_cookies.js +++ b/src/js/ui/tab_cookies.js @@ -25,528 +25,521 @@ const permittedUrls = additionalPermission.origins[0]; const {addSettingItem, getSettingListData, Listener} = require("./components/settingList"); const {closeDialog, openDialog} = require("./components/dialog"); -(function() -{ - const setCookie = chrome.cookies.set; - const onStorageChange = chrome.storage.onChanged; - const cookieWhitelistButtonTitle = getMsg("whitelistSublistCookie"); - const domainWhitelistButtonTitle = getMsg("whitelistCookieDomain"); +const cookieWhitelistButtonTitle = getMsg("whitelistSublistCookie"); +const domainWhitelistButtonTitle = getMsg("whitelistCookieDomain"); - const activeTabCookieId = "activeTabCookies"; +const activeTabCookieId = "activeTabCookies"; - let pmTable = null; - let cookieDialog = null; - document.addEventListener("DOMContentLoaded" , async() => +let pmTable = null; +let cookieDialog = null; +document.addEventListener("DOMContentLoaded" , async() => +{ + Elem("#search-domain").addEventListener("search", populateDomainList, false); + Elem("#search-domain").addEventListener("keyup", function(ev) { - Elem("#search-domain").addEventListener("search", populateDomainList, false); - Elem("#search-domain").addEventListener("keyup", function(ev) - { - if (ev.key != "Enter" && ev.key != "Escape") - populateDomainList(); - }, false); - - const cookiesTab = Elem("#panel-cookies"); - const leftSettingList = Elem("ul.settings-list:nth-of-type(1)", cookiesTab); - const rightSettingList = Elem("ul.settings-list:nth-of-type(2)", cookiesTab); - - const settingObjPermissions = createBasicSettingObj("additionalPermissions"); - addSettingItem(leftSettingList, settingObjPermissions, "permission"); - permissionChange(await browser.permissions.contains(additionalPermission)); - - browser.permissions.onAdded.addListener(({origins}) => - { - if (origins.includes(permittedUrls)) - permissionChange(true); - }); - - browser.permissions.onRemoved.addListener(({origins}) => - { - if (origins.includes(permittedUrls)) - permissionChange(false); - }); - - var settingObj = createBasicSettingObj(activeTabCookieId); - addSettingItem(rightSettingList, settingObj, "storage"); - - new Listener().on(activeTabCookieId, (active)=> - { - if (active) - updateFilterToActiveDomain(); - }); - - cookieDialog = document.querySelector("pm-dialog.cookies"); - pmTable = document.querySelector("pm-table"); - - registerActionListener(Elem("#cookiesContainer"), onCookiesAction); - registerActionListener(Elem("#dialog-content-cookie-delete-all"), onCookiesAction); - registerActionListener(cookieDialog, onCookiesAction); - pmTable.setListener(onCookiesAction); + if (ev.key != "Enter" && ev.key != "Escape") + populateDomainList(); }, false); - async function permissionChange(granted) - { - disableControls(!granted); - if (granted) - { - const state = await getSettingListData(activeTabCookieId); - if (state) - updateFilterToActiveDomain(); - else - populateDomainList(); - } - } + const cookiesTab = Elem("#panel-cookies"); + const leftSettingList = Elem("ul.settings-list:nth-of-type(1)", cookiesTab); + const rightSettingList = Elem("ul.settings-list:nth-of-type(2)", cookiesTab); + + const settingObjPermissions = createBasicSettingObj("additionalPermissions"); + addSettingItem(leftSettingList, settingObjPermissions, "permission"); + permissionChange(await browser.permissions.contains(additionalPermission)); - async function getCookiesCountForDomain() + browser.permissions.onAdded.addListener(({origins}) => { - const cookies = await browser.cookies.getAll({}); - return cookies.reduce((acc, {domain}) => - { - const genericDomain = removeStartDot(domain); - if (acc[genericDomain]) - acc[genericDomain] = ++acc[genericDomain]; - else - acc[genericDomain] = 1; - return acc; - }, {}); - } + if (origins.includes(permittedUrls)) + permissionChange(true); + }); - async function populateDomainList() + browser.permissions.onRemoved.addListener(({origins}) => { - pmTable.empty(); - const searchExpression = new RegExp(Elem("#search-domain").value); - const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); - const isWhitelisted = (domain) => - { - return cookieWhitelist[domain] && cookieWhitelist[domain].domainWhitelist; - }; - const domainObjs = []; - const domainCounts = await getCookiesCountForDomain(); - for (const domain in domainCounts) - { - if (!searchExpression.test(domain)) - continue; + if (origins.includes(permittedUrls)) + permissionChange(false); + }); - const count = domainCounts[domain]; - domainObjs.push(createDomainObj(domain, count, isWhitelisted(domain))); - } - document.querySelector("pm-table").addItems(domainObjs); - } + const settingObj = createBasicSettingObj(activeTabCookieId); + addSettingItem(rightSettingList, settingObj, "storage"); - function setCookiesNum(cookienum) + new Listener().on(activeTabCookieId, (active)=> { - return cookienum + " Cookies"; - } + if (active) + updateFilterToActiveDomain(); + }); - /** - * Create a Table List Item Structure Object - * @param {String} domain Domain name - * @param {Number} cookienum Number of domain cookies - * @param {Boolean} whitelist specifies whether domain is whitelisted - */ - function createDomainObj(domain, cookienum, whitelist) - { - return { - id: domain, - texts: { - domain: domain, - cookienum: setCookiesNum(cookienum) - }, - titles: { - whitelist: domainWhitelistButtonTitle - }, - dataset: {whitelist} - }; - } + cookieDialog = document.querySelector("pm-dialog.cookies"); + pmTable = document.querySelector("pm-table"); - async function isCookieWhitelisted(domain, cookie) - { - const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); - return cookieWhitelist[domain] && cookieWhitelist[domain].cookies && - cookieWhitelist[domain].cookies.includes(cookie); - } + registerActionListener(Elem("#cookiesContainer"), onCookiesAction); + registerActionListener(Elem("#dialog-content-cookie-delete-all"), onCookiesAction); + registerActionListener(cookieDialog, onCookiesAction); + pmTable.setListener(onCookiesAction); +}, false); - async function isDomainWhitelisted(domain) +async function permissionChange(granted) +{ + disableControls(!granted); + if (granted) { - const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); - return cookieWhitelist && cookieWhitelist[domain] && cookieWhitelist[domain].domainWhitelist; + const state = await getSettingListData(activeTabCookieId); + if (state) + updateFilterToActiveDomain(); + else + populateDomainList(); } +} - async function setWhitelistDomain(domain, value) +async function getCookiesCountForDomain() +{ + const cookies = await browser.cookies.getAll({}); + return cookies.reduce((acc, {domain}) => { - const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); - if (!(domain in cookieWhitelist)) - cookieWhitelist[domain] = {domainWhitelist: value, cookies: []}; + const genericDomain = removeStartDot(domain); + if (acc[genericDomain]) + acc[genericDomain] = ++acc[genericDomain]; else - cookieWhitelist[domain].domainWhitelist = value; - await browser.storage.local.set({cookieWhitelist}); - } + acc[genericDomain] = 1; + return acc; + }, {}); +} - async function setWhitelistCookie(domain, cookie, value) +async function populateDomainList() +{ + pmTable.empty(); + const searchExpression = new RegExp(Elem("#search-domain").value); + const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); + const isWhitelisted = (domain) => { - const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); - if (!(domain in cookieWhitelist)) - cookieWhitelist[domain] = {domainWhitelist: false, cookies: [cookie]}; - else if (cookieWhitelist[domain].cookies.includes(cookie)) - cookieWhitelist[domain].cookies = cookieWhitelist[domain].cookies.filter(el => el !== cookie); - else - cookieWhitelist[domain].cookies.push(cookie); - await browser.storage.local.set({cookieWhitelist}); + return cookieWhitelist[domain] && cookieWhitelist[domain].domainWhitelist; + }; + const domainObjs = []; + const domainCounts = await getCookiesCountForDomain(); + for (const domain in domainCounts) + { + if (!searchExpression.test(domain)) + continue; + + const count = domainCounts[domain]; + domainObjs.push(createDomainObj(domain, count, isWhitelisted(domain))); } + document.querySelector("pm-table").addItems(domainObjs); +} - async function onCookiesAction(action, item, parentItem) - { - pmTable = document.querySelector("pm-table"); - switch (action) - { - case "get-cookies": - { - const subitems = item.subItems; - if (subitems) - { - onCookiesAction("close-expanded-domain", null, item); - return; - } - const domain = item.id; - const cookies = await browser.cookies.getAll({domain}); +function setCookiesNum(cookienum) +{ + return cookienum + " Cookies"; +} + +/** + * Create a Table List Item Structure Object + * @param {String} domain Domain name + * @param {Number} cookienum Number of domain cookies + * @param {Boolean} whitelist specifies whether domain is whitelisted + */ +function createDomainObj(domain, cookienum, whitelist) +{ + return { + id: domain, + texts: { + domain: domain, + cookienum: setCookiesNum(cookienum) + }, + titles: { + whitelist: domainWhitelistButtonTitle + }, + dataset: {whitelist} + }; +} + +async function isCookieWhitelisted(domain, cookie) +{ + const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); + return cookieWhitelist[domain] && cookieWhitelist[domain].cookies && + cookieWhitelist[domain].cookies.includes(cookie); +} - for (const cookie of cookies) - { - // Filter subdomains matched cookies - if (cookie.domain.indexOf(domain) > 1) - continue; +async function isDomainWhitelisted(domain) +{ + const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); + return cookieWhitelist && cookieWhitelist[domain] && cookieWhitelist[domain].domainWhitelist; +} - const isWhitelisted = await isCookieWhitelisted(domain, cookie.name); - pmTable.addItems([createCookieSubitemObj(cookie, isWhitelisted)], domain); - } - const subitemId = pmTable.getItem(domain).subItems[0].id; - pmTable.selectItem(subitemId, domain); - break; - } - case "close-expanded-domain": +async function setWhitelistDomain(domain, value) +{ + const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); + if (!(domain in cookieWhitelist)) + cookieWhitelist[domain] = {domainWhitelist: value, cookies: []}; + else + cookieWhitelist[domain].domainWhitelist = value; + await browser.storage.local.set({cookieWhitelist}); +} + +async function setWhitelistCookie(domain, cookie, value) +{ + const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); + if (!(domain in cookieWhitelist)) + cookieWhitelist[domain] = {domainWhitelist: false, cookies: [cookie]}; + else if (cookieWhitelist[domain].cookies.includes(cookie)) + cookieWhitelist[domain].cookies = cookieWhitelist[domain].cookies.filter(el => el !== cookie); + else + cookieWhitelist[domain].cookies.push(cookie); + await browser.storage.local.set({cookieWhitelist}); +} + +async function onCookiesAction(action, item, parentItem) +{ + pmTable = document.querySelector("pm-table"); + switch (action) + { + case "get-cookies": + { + const subitems = item.subItems; + if (subitems) { - pmTable.empty(parentItem.id); - break; + onCookiesAction("close-expanded-domain", null, item); + return; } - case "whitelist-domain": + const domain = item.id; + const cookies = await browser.cookies.getAll({domain}); + + for (const cookie of cookies) { - const domain = item.texts.domain; - const currentValue = await isDomainWhitelisted(domain); - await setWhitelistDomain(domain, !currentValue); - break; + // Filter subdomains matched cookies + if (cookie.domain.indexOf(domain) > 1) + continue; + + const isWhitelisted = await isCookieWhitelisted(domain, cookie.name); + pmTable.addItems([createCookieSubitemObj(cookie, isWhitelisted)], domain); } - case "whitelist-cookie": + const subitemId = pmTable.getItem(domain).subItems[0].id; + pmTable.selectItem(subitemId, domain); + break; + } + case "close-expanded-domain": + { + pmTable.empty(parentItem.id); + break; + } + case "whitelist-domain": + { + const domain = item.texts.domain; + const currentValue = await isDomainWhitelisted(domain); + await setWhitelistDomain(domain, !currentValue); + break; + } + case "whitelist-cookie": + { + const cookie = item.texts.name; + const domain = parentItem.texts.domain; + await setWhitelistCookie(domain, cookie); + break; + } + case "delete-domain": + { + const domain = item.texts.domain; + const cookies = await browser.cookies.getAll({domain}); + for (const cookie of cookies) { - const cookie = item.texts.name; - const domain = parentItem.texts.domain; - await setWhitelistCookie(domain, cookie); - break; + const url = getUrl(cookie.domain, cookie.path, cookie.secure); + browser.cookies.remove({"url": url, "name": cookie.name}); } - case "delete-domain": + break; + } + case "open-dialog": { + openDialog("cookie-edit"); + break; + } + case "delete-cookie": + { + const domain = parentItem.texts.domain; + const cookies = await browser.cookies.getAll({domain}); + for (const cookie of cookies) { - const domain = item.texts.domain; - const cookies = await browser.cookies.getAll({domain}); - for (const cookie of cookies) + // Filter subdomains matched cookies + if (cookie.domain.indexOf(domain) > 1) + continue; + + if (item.texts.name === cookie.name) { - const url = getUrl(cookie.domain, cookie.path, cookie.secure); - browser.cookies.remove({"url": url, "name": cookie.name}); + const url = getUrl(domain, cookie.path, cookie.secure); + browser.cookies.remove({url, "name": cookie.name}); } - break; - } - case "open-dialog": { - openDialog("cookie-edit"); - break; } - case "delete-cookie": + break; + } + case "edit-cookie-comp": { + const cookieName = item.texts.name; + const url = getUrl(parentItem.texts.domain, + item.dataset.path, + item.dataset.secure); + const {name, value, domain, path, hostOnly, httpOnly, secure, + session, storeId, + expirationDate} = await browser.cookies.get({url, name: cookieName}); + let date, time = ""; + if (expirationDate) { - const domain = parentItem.texts.domain; - const cookies = await browser.cookies.getAll({domain}); - for (const cookie of cookies) - { - // Filter subdomains matched cookies - if (cookie.domain.indexOf(domain) > 1) - continue; - - if (item.texts.name === cookie.name) - { - const url = getUrl(domain, cookie.path, cookie.secure); - browser.cookies.remove({url, "name": cookie.name}); - } - } - break; + const dateTime = new Date(expirationDate); + // supports -> yyyy-mm-dd + date = dateTime.toISOString().split("T")[0]; + // supports -> hh:mm:ss + const twoDigits = (value) => value < 10 ? `0${value}` : value; + const hour = twoDigits(dateTime.getHours()); + const minute = twoDigits(dateTime.getMinutes()); + const second = twoDigits(dateTime.getSeconds()); + time = `${hour}:${minute}:${second}`; } - case "edit-cookie-comp": { - const cookieName = item.texts.name; - const url = getUrl(parentItem.texts.domain, - item.dataset.path, - item.dataset.secure); - const {name, value, domain, path, hostOnly, httpOnly, secure, - session, storeId, - expirationDate} = await browser.cookies.get({url, name: cookieName}); - let date, time = ""; - if (expirationDate) - { - const dateTime = new Date(expirationDate); - // supports -> yyyy-mm-dd - date = dateTime.toISOString().split("T")[0]; - // supports -> hh:mm:ss - const twoDigits = (value) => value < 10 ? `0${value}` : value; - const hour = twoDigits(dateTime.getHours()); - const minute = twoDigits(dateTime.getMinutes()); - const second = twoDigits(dateTime.getSeconds()); - time = `${hour}:${minute}:${second}`; - } - const title = await getMessage("editCookie"); - const actionBtn = await getMessage("cookieDialog_update"); - const data = { - name, value, path, hostOnly, httpOnly, session, storeId, secure, - actionBtn, - domain: removeStartDot(domain), - expirationDate: date, - expirationTime: time - }; - resetDialog(); - getDialogField("name").setAttribute("disabled", "disabled"); - getDialogField("domain").setAttribute("disabled", "disabled"); - cookieDialog.classList.remove("add"); - cookieDialog.showDialog(title, data); - break; - } - case "add-cookie-comp": { - resetDialog(); - const title = await getMessage("addCookie"); - getDialogField("name").removeAttribute("disabled"); - getDialogField("domain").removeAttribute("disabled"); - const actionBtn = await getMessage("cookieDialog_add"); - cookieDialog.classList.add("add"); - cookieDialog.showDialog(title, {actionBtn}); - break; + const title = await getMessage("editCookie"); + const actionBtn = await getMessage("cookieDialog_update"); + const data = { + name, value, path, hostOnly, httpOnly, session, storeId, secure, + actionBtn, + domain: removeStartDot(domain), + expirationDate: date, + expirationTime: time + }; + resetDialog(); + getDialogField("name").setAttribute("disabled", "disabled"); + getDialogField("domain").setAttribute("disabled", "disabled"); + cookieDialog.classList.remove("add"); + cookieDialog.showDialog(title, data); + break; + } + case "add-cookie-comp": { + resetDialog(); + const title = await getMessage("addCookie"); + getDialogField("name").removeAttribute("disabled"); + getDialogField("domain").removeAttribute("disabled"); + const actionBtn = await getMessage("cookieDialog_add"); + cookieDialog.classList.add("add"); + cookieDialog.showDialog(title, {actionBtn}); + break; + } + case "update-cookie-comp": { + if (!cookieDialog.querySelector("form").reportValidity()) + return; + + const time = getDialogField("expirationTime").value; + const date = getDialogField("expirationDate").value; + const dateTime = time ? `${date}T${time}` : date; + + const cookie = { + "url": getUrl(getDialogField("domain").value, + getDialogField("path").value, + getDialogField("secure").checked), + "path": getDialogField("path").value, + "domain": getDialogField("domain").value, + "name": getDialogField("name").value, + "value": getDialogField("value").value, + "secure": getDialogField("secure").checked, + "httpOnly": getDialogField("httpOnly").checked, + "storeId": getDialogField("storeId").value, + "expirationDate": new Date(dateTime).getTime() + }; + + if (getDialogField("hostOnly").checked) + { + // Omitted domain makes host-only cookie + delete cookie.domain; } - case "update-cookie-comp": { - if (!cookieDialog.querySelector("form").reportValidity()) - return; - - const time = getDialogField("expirationTime").value; - const date = getDialogField("expirationDate").value; - const dateTime = time ? `${date}T${time}` : date; - - const cookie = { - "url": getUrl(getDialogField("domain").value, - getDialogField("path").value, - getDialogField("secure").checked), - "path": getDialogField("path").value, - "domain": getDialogField("domain").value, - "name": getDialogField("name").value, - "value": getDialogField("value").value, - "secure": getDialogField("secure").checked, - "httpOnly": getDialogField("httpOnly").checked, - "storeId": getDialogField("storeId").value, - "expirationDate": new Date(dateTime).getTime() - }; - - if (getDialogField("hostOnly").checked) - { - // Omitted domain makes host-only cookie - delete cookie.domain; - } - if (getDialogField("session").checked) - { - // Omitted expirationDate makes session cookie - delete cookie.expirationDate; - } - if (await browser.cookies.set(cookie)) - { - cookieDialog.closeDialog(); - } - break; + if (getDialogField("session").checked) + { + // Omitted expirationDate makes session cookie + delete cookie.expirationDate; } - case "delete-all-cookies": { - deleteCookies(); - closeDialog(); - break; + if (await browser.cookies.set(cookie)) + { + cookieDialog.closeDialog(); } + break; + } + case "delete-all-cookies": { + deleteCookies(); + closeDialog(); + break; } } +} - function getDialogField(id) - { - return cookieDialog.querySelector(`[data-id='${id}']`); - } +function getDialogField(id) +{ + return cookieDialog.querySelector(`[data-id='${id}']`); +} - function resetDialog() - { - cookieDialog.querySelector("form").reset(); - } +function resetDialog() +{ + cookieDialog.querySelector("form").reset(); +} - /** - * Filter cookies list according to the active tab URL - */ - function updateFilterToActiveDomain() +/** + * Filter cookies list according to the active tab URL + */ +async function updateFilterToActiveDomain() +{ + const tab = await browser.tabs.query({active: true}); + const url = tab[0].url; + if (url.indexOf("://") > -1) { - chrome.tabs.query({active: true}, function(tab) - { - const url = tab[0].url; - if (url.indexOf("://") > -1) - { - var domain = url.split('/')[2].split(':')[0].replace("www.", ""); - Elem("#search-domain").value = domain; - populateDomainList(); - } - }); + const domain = url.split('/')[2].split(':')[0].replace("www.", ""); + Elem("#search-domain").value = domain; + populateDomainList(); } +} - /** - * Enable/disable control elements - * @param {Boolean} disabled - */ - function disableControls(disabled) +/** + * Enable/disable control elements + * @param {Boolean} disabled + */ +function disableControls(disabled) +{ + Elem("#cookie-controls").childNodes.forEach(function(Node) { - Elem("#cookie-controls").childNodes.forEach(function(Node) - { - if (Node.nodeType == 1) - if (disabled) - Node.setAttribute("disabled", disabled); - else - Node.removeAttribute("disabled"); - }); - } + if (Node.nodeType == 1) + if (disabled) + Node.setAttribute("disabled", disabled); + else + Node.removeAttribute("disabled"); + }); +} - function removeStartDot(string) - { - return string.replace(/^\./, ""); - } +function removeStartDot(string) +{ + return string.replace(/^\./, ""); +} - function getUrl(domain, path, isSecure) - { - return "http" + (isSecure ? "s" : "") + "://" + domain + path; - } +function getUrl(domain, path, isSecure) +{ + return "http" + (isSecure ? "s" : "") + "://" + domain + path; +} - function createCookieSubitemObj(cookie, whitelist) +function createCookieSubitemObj(cookie, whitelist) +{ + return { + id: cookie.name, + texts: { + name: cookie.name, + value: cookie.value + }, + titles: { + whitelist: cookieWhitelistButtonTitle + }, + dataset: {whitelist, path: cookie.path, secure: cookie.secure} + }; +} + +browser.storage.onChanged.addListener(async({cookieWhitelist}) => +{ + if (cookieWhitelist) { - return { - id: cookie.name, - texts: { - name: cookie.name, - value: cookie.value - }, - titles: { - whitelist: cookieWhitelistButtonTitle - }, - dataset: {whitelist, path: cookie.path, secure: cookie.secure} - }; - } + const {newValue, oldValue} = cookieWhitelist; - onStorageChange.addListener(async({cookieWhitelist}) => - { - if (cookieWhitelist) + for (const domain in newValue) { - const {newValue, oldValue} = cookieWhitelist; - - for (const domain in newValue) + if (!oldValue[domain]) { - if (!oldValue[domain]) + if (newValue[domain].domainWhitelist) { - if (newValue[domain].domainWhitelist) + const item = pmTable.getItem(domain); + item.dataset.whitelist = true; + pmTable.updateItem(item, domain); + } + } + else + { + const oldDomainObj = oldValue[domain]; + const newDomainObj = newValue[domain]; + if (newDomainObj.domainWhitelist !== oldDomainObj.domainWhitelist) + { + const item = pmTable.getItem(domain); + item.dataset.whitelist = newDomainObj.domainWhitelist; + pmTable.updateItem(item, domain); + } + const oldCookies = oldDomainObj.cookies; + const newCookies = newDomainObj.cookies; + for (const cookie of newCookies) + { + if (!oldCookies.includes(cookie)) { - const item = pmTable.getItem(domain); + const item = pmTable.getItem(cookie, domain); item.dataset.whitelist = true; - pmTable.updateItem(item, domain); + pmTable.updateItem(item, cookie, domain); } + oldCookies.splice(oldCookies.indexOf(cookie), 1); } - else + for (const cookie of oldCookies) { - const oldDomainObj = oldValue[domain]; - const newDomainObj = newValue[domain]; - if (newDomainObj.domainWhitelist !== oldDomainObj.domainWhitelist) + const item = pmTable.getItem(cookie, domain); + if (item) { - const item = pmTable.getItem(domain); - item.dataset.whitelist = newDomainObj.domainWhitelist; - pmTable.updateItem(item, domain); - } - const oldCookies = oldDomainObj.cookies; - const newCookies = newDomainObj.cookies; - for (const cookie of newCookies) - { - if (!oldCookies.includes(cookie)) - { - const item = pmTable.getItem(cookie, domain); - item.dataset.whitelist = true; - pmTable.updateItem(item, cookie, domain); - } - oldCookies.splice(oldCookies.indexOf(cookie), 1); - } - for (const cookie of oldCookies) - { - const item = pmTable.getItem(cookie, domain); - if (item) - { - item.dataset.whitelist = false; - pmTable.updateItem(item, cookie, domain); - } + item.dataset.whitelist = false; + pmTable.updateItem(item, cookie, domain); } } } } - }); + } +}); + +browser.cookies.onChanged.addListener(async({cookie, removed}) => +{ + const domain = removeStartDot(cookie.domain); + const domainCounts = await getCookiesCountForDomain(); - browser.cookies.onChanged.addListener(async({cookie, removed}) => + if (removed) { - const domain = removeStartDot(cookie.domain); - const domainCounts = await getCookiesCountForDomain(); + if (!pmTable.getItem(domain) || !pmTable.getItem(cookie.name, domain)) + return; - if (removed) + if (!domainCounts[domain]) { - if (!pmTable.getItem(domain) || !pmTable.getItem(cookie.name, domain)) - return; - - if (!domainCounts[domain]) - { - pmTable.removeItem(domain); - const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); - delete cookieWhitelist[domain]; - await browser.storage.local.set({cookieWhitelist}); - } - else - { - pmTable.removeItem(cookie.name, domain); - setWhitelistCookie(domain, cookie.name, false); - const domainItem = pmTable.getItem(domain); - domainItem.texts.cookienum = setCookiesNum(domainCounts[domain]); - pmTable.updateItem(domainItem, domain); - } + pmTable.removeItem(domain); + const {cookieWhitelist} = await browser.storage.local.get("cookieWhitelist"); + delete cookieWhitelist[domain]; + await browser.storage.local.set({cookieWhitelist}); } else { - const isWhitelisted = await isCookieWhitelisted(domain, cookie.name); - const newItem = createCookieSubitemObj(cookie, isWhitelisted); - const hasDomainItem = pmTable.getItem(domain); - const isDomainExpanded = hasDomainItem && hasDomainItem.subItems; - const hasCookieItem = pmTable.getItem(cookie.name, domain); + pmTable.removeItem(cookie.name, domain); + setWhitelistCookie(domain, cookie.name, false); + const domainItem = pmTable.getItem(domain); + domainItem.texts.cookienum = setCookiesNum(domainCounts[domain]); + pmTable.updateItem(domainItem, domain); + } + } + else + { + const isWhitelisted = await isCookieWhitelisted(domain, cookie.name); + const newItem = createCookieSubitemObj(cookie, isWhitelisted); + const hasDomainItem = pmTable.getItem(domain); + const isDomainExpanded = hasDomainItem && hasDomainItem.subItems; + const hasCookieItem = pmTable.getItem(cookie.name, domain); - if (hasCookieItem && hasDomainItem) - { - pmTable.updateItem(newItem, cookie.name, domain); - } - else if (!hasDomainItem) - { - const whitelisted = await isDomainWhitelisted(domain); - const domainItem = createDomainObj(domain, domainCounts[domain], - whitelisted); - pmTable.addItems([domainItem]); - } - else if (isDomainExpanded) - { - const domainItem = pmTable.getItem(domain); - domainItem.texts.cookienum = setCookiesNum(domainCounts[domain]); - pmTable.updateItem(domainItem, domain); - pmTable.addItems([newItem], domain); - } - else - { - const domainItem = pmTable.getItem(domain); - domainItem.texts.cookienum = setCookiesNum(domainCounts[domain]); - pmTable.updateItem(domainItem, domain); - } + if (hasCookieItem && hasDomainItem) + { + pmTable.updateItem(newItem, cookie.name, domain); } - }); -})(); + else if (!hasDomainItem) + { + const whitelisted = await isDomainWhitelisted(domain); + const domainItem = createDomainObj(domain, domainCounts[domain], + whitelisted); + pmTable.addItems([domainItem]); + } + else if (isDomainExpanded) + { + const domainItem = pmTable.getItem(domain); + domainItem.texts.cookienum = setCookiesNum(domainCounts[domain]); + pmTable.updateItem(domainItem, domain); + pmTable.addItems([newItem], domain); + } + else + { + const domainItem = pmTable.getItem(domain); + domainItem.texts.cookienum = setCookiesNum(domainCounts[domain]); + pmTable.updateItem(domainItem, domain); + } + } +});