Excluding containers from sync with RegExp

https://github.com/mozilla/multi-account-containers/pull/2231
This commit is contained in:
BPower0036 2022-07-29 15:57:55 +00:00 committed by GitHub
parent 9afc07de0a
commit 61e5960c6f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 0 deletions

View file

@ -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;

View file

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

View file

@ -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);

View file

@ -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();

View file

@ -48,6 +48,15 @@
</label>
<p><em data-i18n-message-id="enableSyncDescription"></em></p>
</div>
<div class="settings-group-column">
<label for="syncExcludeRegExp">
<span class="bold" data-i18n-message-id="syncExclude"></span>
</label>
<input id="syncExcludeRegExp"
data-i18n-attribute="placeholder"
data-i18n-attribute-message-id="syncExcludePlaceholder">
<p><em data-i18n-message-id="syncExcludeDescription"></em></p>
</div>
<h3 data-i18n-message-id="tabBehavior"></h3>
<div class="settings-group">