Bug 1628936 - [devtools] Use the correct storage principal for handling cookies. r=ladybenko

For iframes it's important that we use the correct storage principal when interacting with cookies.
With dFPI enabled the origin attributes of third party contexts are different from the top ones.
This led to situations where we didn't show any cookies for storage isolated third party frames.

Differential Revision: https://phabricator.services.mozilla.com/D99439
This commit is contained in:
Paul Zuehlcke 2021-01-08 16:33:36 +00:00
Родитель eed886e7e2
Коммит fd417d4f9f
1 изменённых файлов: 25 добавлений и 25 удалений

Просмотреть файл

@ -635,12 +635,9 @@ StorageActors.createActor(
populateStoresForHost(host) {
this.hostVsStores.set(host, new Map());
const doc = this.storageActor.document;
const cookies = this.getCookiesFromHost(
host,
doc.effectiveStoragePrincipal.originAttributes
);
const originAttributes = this.getOriginAttributesFromHost(host);
const cookies = this.getCookiesFromHost(host, originAttributes);
for (const cookie of cookies) {
if (this.isCookieAtHost(cookie, host)) {
@ -653,6 +650,22 @@ StorageActors.createActor(
}
},
getOriginAttributesFromHost(host) {
const win = this.storageActor.getWindowFromHost(host);
let originAttributes;
if (win) {
originAttributes =
win.document.effectiveStoragePrincipal.originAttributes;
} else {
// If we can't find the window by host, fallback to the top window
// origin attributes.
originAttributes = this.storageActor.document.effectiveStoragePrincipal
.originAttributes;
}
return originAttributes;
},
/**
* Notification observer for "cookie-change".
*
@ -763,8 +776,7 @@ StorageActors.createActor(
* See editCookie() for format details.
*/
async editItem(data) {
const doc = this.storageActor.document;
data.originAttributes = doc.effectiveStoragePrincipal.originAttributes;
data.originAttributes = this.getOriginAttributesFromHost(data.host);
this.editCookie(data);
},
@ -777,30 +789,18 @@ StorageActors.createActor(
},
async removeItem(host, name) {
const doc = this.storageActor.document;
this.removeCookie(
host,
name,
doc.effectiveStoragePrincipal.originAttributes
);
const originAttributes = this.getOriginAttributesFromHost(host);
this.removeCookie(host, name, originAttributes);
},
async removeAll(host, domain) {
const doc = this.storageActor.document;
this.removeAllCookies(
host,
domain,
doc.effectiveStoragePrincipal.originAttributes
);
const originAttributes = this.getOriginAttributesFromHost(host);
this.removeAllCookies(host, domain, originAttributes);
},
async removeAllSessionCookies(host, domain) {
const doc = this.storageActor.document;
this.removeAllSessionCookies(
host,
domain,
doc.effectiveStoragePrincipal.originAttributes
);
const originAttributes = this.getOriginAttributesFromHost(host);
this.removeAllSessionCookies(host, domain, originAttributes);
},
maybeSetupChildProcess() {