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);
+ }
+ }
+});