122 lines
3.4 KiB
JavaScript
122 lines
3.4 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
"use strict";
|
|
|
|
// These are defined on "global" which is used for the same scopes as the other
|
|
// ext-*.js files.
|
|
/* exported getCookieStoreIdForTab, getCookieStoreIdForContainer,
|
|
getContainerForCookieStoreId,
|
|
isValidCookieStoreId, isContainerCookieStoreId,
|
|
EventManager, URL */
|
|
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
ContextualIdentityService:
|
|
"resource://gre/modules/ContextualIdentityService.sys.mjs",
|
|
});
|
|
|
|
XPCOMUtils.defineLazyGlobalGetters(this, ["URL"]);
|
|
|
|
var { ExtensionCommon } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/ExtensionCommon.sys.mjs"
|
|
);
|
|
|
|
var { ExtensionError } = ExtensionUtils;
|
|
|
|
global.EventEmitter = ExtensionCommon.EventEmitter;
|
|
global.EventManager = ExtensionCommon.EventManager;
|
|
|
|
global.DEFAULT_STORE = "firefox-default";
|
|
global.PRIVATE_STORE = "firefox-private";
|
|
global.CONTAINER_STORE = "firefox-container-";
|
|
|
|
global.getCookieStoreIdForTab = function (data, tab) {
|
|
if (data.incognito) {
|
|
return PRIVATE_STORE;
|
|
}
|
|
|
|
if (tab.userContextId) {
|
|
return getCookieStoreIdForContainer(tab.userContextId);
|
|
}
|
|
|
|
return DEFAULT_STORE;
|
|
};
|
|
|
|
global.getCookieStoreIdForOriginAttributes = function (originAttributes) {
|
|
if (originAttributes.privateBrowsingId) {
|
|
return PRIVATE_STORE;
|
|
}
|
|
|
|
if (originAttributes.userContextId) {
|
|
return getCookieStoreIdForContainer(originAttributes.userContextId);
|
|
}
|
|
|
|
return DEFAULT_STORE;
|
|
};
|
|
|
|
global.isPrivateCookieStoreId = function (storeId) {
|
|
return storeId == PRIVATE_STORE;
|
|
};
|
|
|
|
global.isDefaultCookieStoreId = function (storeId) {
|
|
return storeId == DEFAULT_STORE;
|
|
};
|
|
|
|
global.isContainerCookieStoreId = function (storeId) {
|
|
return storeId !== null && storeId.startsWith(CONTAINER_STORE);
|
|
};
|
|
|
|
global.getCookieStoreIdForContainer = function (containerId) {
|
|
return CONTAINER_STORE + containerId;
|
|
};
|
|
|
|
global.getContainerForCookieStoreId = function (storeId) {
|
|
if (!isContainerCookieStoreId(storeId)) {
|
|
return null;
|
|
}
|
|
|
|
let containerId = storeId.substring(CONTAINER_STORE.length);
|
|
|
|
if (AppConstants.platform === "android") {
|
|
return parseInt(containerId, 10);
|
|
} // TODO: Bug 1643740, support ContextualIdentityService on Android
|
|
|
|
if (ContextualIdentityService.getPublicIdentityFromId(containerId)) {
|
|
return parseInt(containerId, 10);
|
|
}
|
|
|
|
return null;
|
|
};
|
|
|
|
global.isValidCookieStoreId = function (storeId) {
|
|
return (
|
|
isDefaultCookieStoreId(storeId) ||
|
|
isPrivateCookieStoreId(storeId) ||
|
|
isContainerCookieStoreId(storeId)
|
|
);
|
|
};
|
|
|
|
global.getOriginAttributesPatternForCookieStoreId = function (cookieStoreId) {
|
|
if (isDefaultCookieStoreId(cookieStoreId)) {
|
|
return {
|
|
userContextId: Ci.nsIScriptSecurityManager.DEFAULT_USER_CONTEXT_ID,
|
|
privateBrowsingId:
|
|
Ci.nsIScriptSecurityManager.DEFAULT_PRIVATE_BROWSING_ID,
|
|
};
|
|
}
|
|
if (isPrivateCookieStoreId(cookieStoreId)) {
|
|
return {
|
|
userContextId: Ci.nsIScriptSecurityManager.DEFAULT_USER_CONTEXT_ID,
|
|
privateBrowsingId: 1,
|
|
};
|
|
}
|
|
if (isContainerCookieStoreId(cookieStoreId)) {
|
|
let userContextId = getContainerForCookieStoreId(cookieStoreId);
|
|
if (userContextId !== null) {
|
|
return { userContextId };
|
|
}
|
|
}
|
|
|
|
throw new ExtensionError("Invalid cookieStoreId");
|
|
};
|