diff --git a/index.js b/index.js index ea50364..2bc59e1 100644 --- a/index.js +++ b/index.js @@ -196,11 +196,10 @@ const ContainerService = { "moveTabsToWindow", "queryIdentities", "getIdentity", - "createIdentity", - "updateIdentity", "getPreference", "sendTelemetryPayload", "getTheme", + "refreshNeeded", "forgetIdentityAndRefresh", "checkIncompatibleAddons" ]; @@ -911,62 +910,6 @@ const ContainerService = { return Promise.resolve(identity ? this._convert(identity) : null); }, - createIdentity(args) { - this.sendTelemetryPayload({ - "event": "add-container", - }); - - for (let arg of [ "name", "color", "icon"]) { // eslint-disable-line prefer-const - if (!(arg in args)) { - return Promise.reject("createIdentity must be called with " + arg + " argument."); - } - } - - const color = this._fromNameToColor(args.color); - const icon = this._fromNameToIcon(args.icon); - - const identity = ContextualIdentityProxy.create(args.name, icon, color); - - this._identitiesState[identity.userContextId] = this._createIdentityState(); - - this._refreshNeeded().then(() => { - return this._convert(identity); - }).catch(() => { - return this._convert(identity); - }); - }, - - updateIdentity(args) { - if (!("userContextId" in args)) { - return Promise.reject("updateIdentity must be called with userContextId argument."); - } - - this.sendTelemetryPayload({ - "event": "edit-container", - "userContextId": args.userContextId - }); - - const identity = ContextualIdentityProxy.getIdentityFromId(args.userContextId); - for (let arg of [ "name", "color", "icon"]) { // eslint-disable-line prefer-const - if ((arg in args)) { - identity[arg] = args[arg]; - } - } - - const color = this._fromNameToColor(identity.color); - const icon = this._fromNameToIcon(identity.icon); - - const updated = ContextualIdentityProxy.update(args.userContextId, - identity.name, - icon, color); - - this._refreshNeeded().then(() => { - return updated; - }).catch(() => { - return updated; - }); - }, - // Preferences getPreference(args) { @@ -1015,7 +958,7 @@ const ContainerService = { return this._windowMap.get(window); }, - _refreshNeeded() { + refreshNeeded() { return this._configureWindows(); }, @@ -1147,7 +1090,7 @@ const ContainerService = { forgetIdentityAndRefresh(args) { this._forgetIdentity(args.userContextId); - return this._refreshNeeded(); + return this.refreshNeeded(); }, _forgetIdentity(userContextId = 0) { diff --git a/webextension/background.js b/webextension/background.js index 5c541d9..6a85cbc 100644 --- a/webextension/background.js +++ b/webextension/background.js @@ -58,26 +58,30 @@ const assignManager = { } }, + _neverAsk(m) { + const pageUrl = m.pageUrl; + if (m.neverAsk === true) { + // If we have existing data and for some reason it hasn't been deleted etc lets update it + this.storageArea.get(pageUrl).then((siteSettings) => { + if (siteSettings) { + siteSettings.neverAsk = true; + this.storageArea.set(pageUrl, siteSettings); + } + }).catch((e) => { + throw e; + }); + } + }, + init() { browser.runtime.onMessage.addListener((m) => { switch (m.type) { - case "delete-container": - assignManager.deleteContainer(m.message.userContextId); - break; - case "never-ask": - const pageUrl = m.pageUrl; - if (m.neverAsk === true) { - // If we have existing data and for some reason it hasn't been deleted etc lets update it - this.storageArea.get(pageUrl).then((siteSettings) => { - if (siteSettings) { - siteSettings.neverAsk = true; - this.storageArea.set(pageUrl, siteSettings); - } - }).catch((e) => { - throw e; - }); - } - break; + case "delete-container": + assignManager.deleteContainer(m.message.userContextId); + break; + case "never-ask": + this._neverAsk(m); + break; } }); diff --git a/webextension/js/popup.js b/webextension/js/popup.js index 1be3406..c3a23c4 100644 --- a/webextension/js/popup.js +++ b/webextension/js/popup.js @@ -152,7 +152,7 @@ const Logic = { tabs.forEach((tab) => { cb(tab); }); - }); + }).catch((e) => {throw e;}); }, _containers(userContextId) { @@ -161,14 +161,21 @@ const Logic = { }); }, + sendTelemetryPayload(message = {}) { + if (!message.event) { + throw new Error("Missing event name for telemetry"); + } + message.method = "sendTelemetryPayload"; + browser.runtime.sendMessage(message); + }, + removeIdentity(userContextId) { const eventName = "delete-container"; if (!userContextId) { return Promise.reject("removeIdentity must be called with userContextId argument."); } - browser.runtime.sendMessage({ - method: "sendTelemetryPayload", + this.sendTelemetryPayload({ event: eventName, userContextId }); @@ -189,7 +196,7 @@ const Logic = { method: "forgetIdentityAndRefresh" }).then(() => { return removed; - }); + }).catch((e) => {throw e;}); }); }, @@ -292,8 +299,7 @@ Logic.registerPanel(P_CONTAINERS_LIST, { }); document.querySelector("#edit-containers-link").addEventListener("click", () => { - browser.runtime.sendMessage({ - method: "sendTelemetryPayload", + Logic.sendTelemetryPayload({ event: "edit-containers" }); Logic.showPanel(P_CONTAINERS_EDIT); @@ -412,12 +418,12 @@ Logic.registerPanel(P_CONTAINER_INFO, { moveTabsEl.parentNode.insertBefore(fragment, moveTabsEl.nextSibling); } else { moveTabsEl.addEventListener("click", () => { - return browser.runtime.sendMessage({ + browser.runtime.sendMessage({ method: "moveTabsToWindow", userContextId: Logic.currentIdentity().userContextId, }).then(() => { window.close(); - }); + }).catch((e) => { throw e; }); }); } }).catch(() => { @@ -583,13 +589,14 @@ Logic.registerPanel(P_CONTAINER_EDIT, { _submitForm() { const identity = Logic.currentIdentity(); const formValues = new FormData(this._editForm); - browser.runtime.sendMessage({ - method: identity.userContextId ? "updateIdentity" : "createIdentity", - userContextId: identity.userContextId || 0, - name: document.getElementById("edit-container-panel-name-input").value || Logic.generateIdentityName(), - icon: formValues.get("container-icon") || DEFAULT_ICON, - color: formValues.get("container-color") || DEFAULT_COLOR, - }).then(() => { + this._createOrUpdateIdentity( + { + name: document.getElementById("edit-container-panel-name-input").value || Logic.generateIdentityName(), + icon: formValues.get("container-icon") || DEFAULT_ICON, + color: formValues.get("container-color") || DEFAULT_COLOR, + }, + identity.userContextId || false + ).then(() => { return Logic.refreshIdentities(); }).then(() => { Logic.showPreviousPanel(); @@ -598,6 +605,30 @@ Logic.registerPanel(P_CONTAINER_EDIT, { }); }, + _createOrUpdateIdentity(params, userContextId) { + let donePromise; + if (userContextId) { + donePromise = browser.contextualIdentities.update( + Logic.cookieStoreId(userContextId), + params + ); + Logic.sendTelemetryPayload({ + event: "edit-container", + userContextId + }); + } else { + donePromise = browser.contextualIdentities.create(params); + Logic.sendTelemetryPayload({ + event: "add-container" + }); + } + return donePromise.then(() => { + browser.runtime.sendMessage({ + method: "refreshNeeded" + }); + }); + }, + initializeRadioButtons() { const colorRadioTemplate = (containerColor) => { return escaped`