added uuids to contextualIdentities within MAC for comparison with other browsers
This commit is contained in:
parent
24c960bed0
commit
f5993add6f
2 changed files with 117 additions and 16 deletions
|
@ -1,3 +1,4 @@
|
||||||
|
/* jshint esversion: 8*/
|
||||||
const assignManager = {
|
const assignManager = {
|
||||||
MENU_ASSIGN_ID: "open-in-this-container",
|
MENU_ASSIGN_ID: "open-in-this-container",
|
||||||
MENU_REMOVE_ID: "remove-open-in-this-container",
|
MENU_REMOVE_ID: "remove-open-in-this-container",
|
||||||
|
@ -9,6 +10,16 @@ const assignManager = {
|
||||||
area: browser.storage.local,
|
area: browser.storage.local,
|
||||||
exemptedTabs: {},
|
exemptedTabs: {},
|
||||||
|
|
||||||
|
getSynced() {
|
||||||
|
const beenSynced = this.area.get("beenSynced");
|
||||||
|
if (Object.entries(beenSynced).length === 0) return false;
|
||||||
|
return true;
|
||||||
|
},
|
||||||
|
|
||||||
|
setSynced() {
|
||||||
|
this.area.set({beenSynced: true});
|
||||||
|
},
|
||||||
|
|
||||||
getSiteStoreKey(pageUrl) {
|
getSiteStoreKey(pageUrl) {
|
||||||
const url = new window.URL(pageUrl);
|
const url = new window.URL(pageUrl);
|
||||||
const storagePrefix = "siteContainerMap@@_";
|
const storagePrefix = "siteContainerMap@@_";
|
||||||
|
@ -92,7 +103,20 @@ const assignManager = {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return sites;
|
return sites;
|
||||||
|
},
|
||||||
|
|
||||||
|
async getAllAssignedSites() {
|
||||||
|
const sites = {};
|
||||||
|
const siteConfigs = await this.area.get();
|
||||||
|
for(const key of Object.keys(siteConfigs)) {
|
||||||
|
if (key.includes("siteContainerMap@@_")) {
|
||||||
|
const site = siteConfigs[key];
|
||||||
|
sites[key] = site;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return sites;
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_neverAsk(m) {
|
_neverAsk(m) {
|
||||||
|
@ -541,13 +565,18 @@ const assignManager = {
|
||||||
for (const identity of identities) {
|
for (const identity of identities) {
|
||||||
browser.contextMenus.remove(identity.cookieStoreId);
|
browser.contextMenus.remove(identity.cookieStoreId);
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
initSync() {
|
async initSync() {
|
||||||
console.log("initSync");
|
console.log("initSync");
|
||||||
browser.storage.onChanged.addListener(runSync);
|
// browser.storage.onChanged.addListener(runSync);
|
||||||
addContextualIdentityListeners();
|
// addContextualIdentityListeners();
|
||||||
|
const beenSynced = await assignManager.storageArea.getSynced();
|
||||||
|
if (beenSynced){
|
||||||
runSync();
|
runSync();
|
||||||
|
} else {
|
||||||
|
runFirstSync();
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -558,11 +587,42 @@ async function backup() {
|
||||||
const identities = await browser.contextualIdentities.query({});
|
const identities = await browser.contextualIdentities.query({});
|
||||||
console.log("backup", identities);
|
console.log("backup", identities);
|
||||||
await browser.storage.sync.set({ identities: identities });
|
await browser.storage.sync.set({ identities: identities });
|
||||||
|
const cookieStoreIDmap = await identityState.getCookieStoreIDuuidMap();
|
||||||
|
await browser.storage.sync.set({ cookieStoreIDmap: cookieStoreIDmap });
|
||||||
|
const assignedSites = await assignManager.storageArea.getAllAssignedSites();
|
||||||
|
await browser.storage.sync.set({ assignedSites: assignedSites});
|
||||||
const storage = await browser.storage.sync.get();
|
const storage = await browser.storage.sync.get();
|
||||||
console.log("in sync: ", storage);
|
console.log("in sync: ", storage);
|
||||||
browser.storage.onChanged.addListener(runSync);
|
browser.storage.onChanged.addListener(runSync);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
browser.resetMAC = async function () {
|
||||||
|
// for debugging and testing: remove all containers except the default 4 and the first one created
|
||||||
|
browser.storage.onChanged.removeListener(runSync);
|
||||||
|
|
||||||
|
// sync state on install: no sync data
|
||||||
|
// await browser.storage.sync.clear();
|
||||||
|
|
||||||
|
// FF1: no sync, Only default containers and 1 extra
|
||||||
|
// browser.storage.local.clear();
|
||||||
|
// const localData = {"browserActionBadgesClicked":["6.1.1"],"containerTabsOpened":6,"identitiesState@@_firefox-container-1":{"hiddenTabs":[]},"identitiesState@@_firefox-container-2":{"hiddenTabs":[]},"identitiesState@@_firefox-container-3":{"hiddenTabs":[]},"identitiesState@@_firefox-container-4":{"hiddenTabs":[]},"identitiesState@@_firefox-container-6":{"hiddenTabs":[]},"identitiesState@@_firefox-default":{"hiddenTabs":[]},"onboarding-stage":5,"siteContainerMap@@_twitter.com":{"userContextId":"1","neverAsk":true},"siteContainerMap@@_www.facebook.com":{"userContextId":"2","neverAsk":true},"siteContainerMap@@_www.linkedin.com":{"userContextId":"4","neverAsk":false}};
|
||||||
|
// browser.storage.local.set(localData);
|
||||||
|
|
||||||
|
// sync state after FF1 (default + 1)
|
||||||
|
await browser.storage.sync.clear();
|
||||||
|
const syncData = {"cookieStoreIDmap":{"firefox-container-1":"38eb85cc-0793-47c3-b51f-a4f1edf8908c","firefox-container-2":"19fcfbe5-c9ae-4445-8c8b-a7853e3d4462","firefox-container-3":"ac97270e-ccf6-4121-8d7f-74b764c5c78f","firefox-container-4":"595ae5cf-669c-4461-a738-05d3321d923e","firefox-container-6":"b39de7b4-b169-4128-bca3-e73f0376d9ed"},"assignedSites":{"siteContainerMap@@_twitter.com":{"userContextId":"1","neverAsk":!0,"userContextUUID":"38eb85cc-0793-47c3-b51f-a4f1edf8908c"},"siteContainerMap@@_www.facebook.com":{"userContextId":"2","neverAsk":!0,"userContextUUID":"19fcfbe5-c9ae-4445-8c8b-a7853e3d4462"},"siteContainerMap@@_www.linkedin.com":{"userContextId":"4","neverAsk":!1,"userContextUUID":"595ae5cf-669c-4461-a738-05d3321d923e"}},"identities":[{"name":"Personal","icon":"fingerprint","iconUrl":"resource://usercontext-content/fingerprint.svg","color":"blue","colorCode":"#37adff","cookieStoreId":"firefox-container-1"},{"name":"Work","icon":"briefcase","iconUrl":"resource://usercontext-content/briefcase.svg","color":"orange","colorCode":"#ff9f00","cookieStoreId":"firefox-container-2"},{"name":"Banking","icon":"dollar","iconUrl":"resource://usercontext-content/dollar.svg","color":"green","colorCode":"#51cd00","cookieStoreId":"firefox-container-3"},{"name":"Shopping","icon":"cart","iconUrl":"resource://usercontext-content/cart.svg","color":"pink","colorCode":"#ff4bda","cookieStoreId":"firefox-container-4"},{"name":"Container #01","icon":"chill","iconUrl":"resource://usercontext-content/chill.svg","color":"green","colorCode":"#51cd00","cookieStoreId":"firefox-container-6"}]};
|
||||||
|
browser.storage.sync.set(syncData);
|
||||||
|
|
||||||
|
// FF2 (intial sync w/ default 4 + 1 with some changes)
|
||||||
|
removeContextualIdentityListeners();
|
||||||
|
browser.contextualIdentities.update("firefox-container-2", {color:"purple"});
|
||||||
|
browser.contextualIdentities.update("firefox-container-4", {icon:"pet"});
|
||||||
|
browser.storage.local.clear();
|
||||||
|
const localData = {"browserActionBadgesClicked":["6.1.1"],"containerTabsOpened":6,"identitiesState@@_firefox-container-1":{"hiddenTabs":[]},"identitiesState@@_firefox-container-2":{"hiddenTabs":[]},"identitiesState@@_firefox-container-3":{"hiddenTabs":[]},"identitiesState@@_firefox-container-4":{"hiddenTabs":[]},"identitiesState@@_firefox-container-6":{"hiddenTabs":[]},"identitiesState@@_firefox-default":{"hiddenTabs":[]},"onboarding-stage":5,"siteContainerMap@@_twitter.com":{"userContextId":"1","neverAsk":!0},"siteContainerMap@@_www.facebook.com":{"userContextId":"2","neverAsk":!0},"siteContainerMap@@_www.linkedin.com":{"userContextId":"4","neverAsk":!1}};
|
||||||
|
browser.storage.local.set(localData);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
async function restore(inSync) {
|
async function restore(inSync) {
|
||||||
removeContextualIdentityListeners();
|
removeContextualIdentityListeners();
|
||||||
const syncIdentities = inSync.identities;
|
const syncIdentities = inSync.identities;
|
||||||
|
@ -600,7 +660,6 @@ async function runSync() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function addContextualIdentityListeners() {
|
function addContextualIdentityListeners() {
|
||||||
console.log("adding listeners");
|
|
||||||
browser.contextualIdentities.onCreated.addListener(backup);
|
browser.contextualIdentities.onCreated.addListener(backup);
|
||||||
browser.contextualIdentities.onRemoved.addListener(backup);
|
browser.contextualIdentities.onRemoved.addListener(backup);
|
||||||
browser.contextualIdentities.onUpdated.addListener(backup);
|
browser.contextualIdentities.onUpdated.addListener(backup);
|
||||||
|
@ -612,14 +671,26 @@ function removeContextualIdentityListeners() {
|
||||||
browser.contextualIdentities.onUpdated.removeListener(backup);
|
browser.contextualIdentities.onUpdated.removeListener(backup);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function runSync() {
|
async function runFirstSync() {
|
||||||
console.log("runSync");
|
console.log("runFirstSync");
|
||||||
const inSync = await browser.storage.sync.get();
|
const browserIdentities = await browser.contextualIdentities.query({});
|
||||||
if (Object.entries(inSync).length === 0){
|
addUUIDsToContainers(browserIdentities);
|
||||||
console.log("no sync storage, backing up...");
|
connectUUIDsToAssignedSites(browserIdentities);
|
||||||
backup();
|
runSync();
|
||||||
} else {
|
assignManager.storageArea.setSynced();
|
||||||
console.log("storage found, attempting to restore ...");
|
}
|
||||||
restore(inSync);
|
|
||||||
|
async function addUUIDsToContainers(browserIdentities) {
|
||||||
|
for (const identity of browserIdentities) {
|
||||||
|
identityState.addUUID(identity.cookieStoreId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function connectUUIDsToAssignedSites(browserIdentities) {
|
||||||
|
const assignedSites = await assignManager.storageArea.getAllAssignedSites();
|
||||||
|
for (const siteKey of Object.keys(assignedSites)) {
|
||||||
|
const identity = await identityState.storageArea.get("firefox-container-" + assignedSites[siteKey].userContextId);
|
||||||
|
assignedSites[siteKey].userContextUUID = identity.macUUID;
|
||||||
|
assignManager.storageArea.area.set({ [siteKey]: assignedSites[siteKey] });
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
/* jshint esversion: 8*/
|
||||||
const identityState = {
|
const identityState = {
|
||||||
storageArea: {
|
storageArea: {
|
||||||
area: browser.storage.local,
|
area: browser.storage.local,
|
||||||
|
@ -36,6 +37,19 @@ const identityState = {
|
||||||
return Object.assign({}, tab);
|
return Object.assign({}, tab);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async getCookieStoreIDuuidMap() {
|
||||||
|
const containers = {};
|
||||||
|
const containerInfo = await identityState.storageArea.area.get();
|
||||||
|
for(const key of Object.keys(containerInfo)) {
|
||||||
|
if (key.includes("identitiesState@@_")) {
|
||||||
|
const container = containerInfo[key];
|
||||||
|
const cookieStoreId = key.replace(/^identitiesState@@_/, "");
|
||||||
|
containers[cookieStoreId] = container.macUUID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return containers;
|
||||||
|
},
|
||||||
|
|
||||||
async storeHidden(cookieStoreId, windowId) {
|
async storeHidden(cookieStoreId, windowId) {
|
||||||
const containerState = await this.storageArea.get(cookieStoreId);
|
const containerState = await this.storageArea.get(cookieStoreId);
|
||||||
const tabsByContainer = await browser.tabs.query({cookieStoreId, windowId});
|
const tabsByContainer = await browser.tabs.query({cookieStoreId, windowId});
|
||||||
|
@ -53,10 +67,26 @@ const identityState = {
|
||||||
|
|
||||||
return this.storageArea.set(cookieStoreId, containerState);
|
return this.storageArea.set(cookieStoreId, containerState);
|
||||||
},
|
},
|
||||||
|
async updateUUID(cookieStoreId, uuid) {
|
||||||
|
const containerState = await this.storageArea.get(cookieStoreId);
|
||||||
|
containerState.macUUID = uuid;
|
||||||
|
return this.storageArea.set(cookieStoreId, containerState);
|
||||||
|
},
|
||||||
|
async addUUID(cookieStoreId) {
|
||||||
|
return this.updateUUID(cookieStoreId, uuidv4());
|
||||||
|
},
|
||||||
|
|
||||||
_createIdentityState() {
|
_createIdentityState() {
|
||||||
return {
|
return {
|
||||||
hiddenTabs: []
|
hiddenTabs: [],
|
||||||
|
macUUID: uuidv4()
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function uuidv4() {
|
||||||
|
// https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript
|
||||||
|
return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
|
||||||
|
(c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
|
||||||
|
);
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue