diff --git a/src/css/options.css b/src/css/options.css index 5a6baf0..99036f6 100644 --- a/src/css/options.css +++ b/src/css/options.css @@ -37,6 +37,16 @@ form { margin-block: 4px 8px; } +.settings-group-column { + display: flex; + flex-direction: column; +} + +.settings-group-column label, +.settings-group-column p { + margin-block: 4px 8px; +} + input[type="checkbox"] { margin-inline: 0 8px; margin-block: 1px auto; diff --git a/src/js/background/backgroundLogic.js b/src/js/background/backgroundLogic.js index f658cf0..3f51036 100644 --- a/src/js/background/backgroundLogic.js +++ b/src/js/background/backgroundLogic.js @@ -27,6 +27,7 @@ const backgroundLogic = { browser.permissions.onAdded.addListener(permissions => this.resetPermissions(permissions)); browser.permissions.onRemoved.addListener(permissions => this.resetPermissions(permissions)); + backgroundLogic.setSyncExclusion(); }, resetPermissions(permissions) { @@ -483,6 +484,17 @@ const backgroundLogic = { cookieStoreId(userContextId) { if(userContextId === 0) return "firefox-default"; return `firefox-container-${userContextId}`; + }, + + async setSyncExclusion() { + // Default container sync exclude regexp to "^tmp\d+$" to prevent + // https://github.com/mozilla/multi-account-containers/issues/1675 + // https://github.com/stoically/temporary-containers/issues/371 + // for future users of the MAC + TC combination. + const { syncExcludeRegExp } = await browser.storage.local.get("syncExcludeRegExp"); + if (syncExcludeRegExp === undefined) { + browser.storage.local.set({syncExcludeRegExp: "^tmp\\d+$"}); + } } }; diff --git a/src/js/background/sync.js b/src/js/background/sync.js index 6dfb629..fc6d875 100644 --- a/src/js/background/sync.js +++ b/src/js/background/sync.js @@ -128,9 +128,16 @@ const sync = { await sync.checkForListenersMaybeAdd(); async function updateSyncIdentities() { + const { syncExcludeRegExp } = await browser.storage.local.get("syncExcludeRegExp"); + const excludeRegExp = new RegExp(syncExcludeRegExp, "i"); const identities = await browser.contextualIdentities.query({}); for (const identity of identities) { + // skip excluded identities + if (identity.name.match(excludeRegExp)) { + continue; + } + delete identity.colorCode; delete identity.iconUrl; identity.macAddonUUID = await identityState.lookupMACaddonUUID(identity.cookieStoreId); diff --git a/src/js/options.js b/src/js/options.js index 067e5dc..e1628c8 100644 --- a/src/js/options.js +++ b/src/js/options.js @@ -120,11 +120,13 @@ async function setupOptions() { const { replaceTabEnabled } = await browser.storage.local.get("replaceTabEnabled"); const { pageActionEnabled } = await browser.storage.local.get({ pageActionEnabled: true }); const { currentThemeId } = await browser.storage.local.get("currentThemeId"); + const { syncExcludeRegExp } = await browser.storage.local.get("syncExcludeRegExp"); document.querySelector("#syncCheck").checked = !!syncEnabled; document.querySelector("#replaceTabCheck").checked = !!replaceTabEnabled; document.querySelector("#pageActionCheck").checked = !!pageActionEnabled; document.querySelector("#changeTheme").selectedIndex = currentThemeId; + document.querySelector("#syncExcludeRegExp").value = syncExcludeRegExp || ""; setupContainerShortcutSelects(); } @@ -178,11 +180,16 @@ async function resetPermissionsUi() { browser.permissions.onAdded.addListener(resetPermissionsUi); browser.permissions.onRemoved.addListener(resetPermissionsUi); +function updateSyncExcludeRegExp(event) { + browser.storage.local.set({syncExcludeRegExp: event.target.value}); +} + document.addEventListener("DOMContentLoaded", setupOptions); document.querySelector("#syncCheck").addEventListener( "change", enableDisableSync); document.querySelector("#replaceTabCheck").addEventListener( "change", enableDisableReplaceTab); document.querySelector("#pageActionCheck").addEventListener( "change", enableDisablePageAction); document.querySelector("#changeTheme").addEventListener( "change", changeTheme); +document.querySelector("#syncExcludeRegExp").addEventListener( "change", updateSyncExcludeRegExp); document.querySelector("#containersRestoreInput").addEventListener( "change", restoreContainers); maybeShowPermissionsWarningIcon(); diff --git a/src/options.html b/src/options.html index 80ea298..3d73d32 100644 --- a/src/options.html +++ b/src/options.html @@ -48,6 +48,15 @@

+
+ + +

+