Bug 1521878 - Have fallback consistency for (de)serialization of principals. r=ckerschb

Differential Revision: https://phabricator.services.mozilla.com/D17271

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Jonathan Kingston 2019-02-21 18:12:35 +00:00
Родитель 7e0ec04242
Коммит cf5ea59a1e
5 изменённых файлов: 27 добавлений и 21 удалений

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

@ -3105,7 +3105,7 @@ var BrowserOnClick = {
},
ignoreWarningLink(reason, blockedInfo) {
let triggeringPrincipal = E10SUtils.deserializePrincipal(blockedInfo.triggeringPrincipal) || _createNullPrincipalFromTabUserContextId();
let triggeringPrincipal = E10SUtils.deserializePrincipal(blockedInfo.triggeringPrincipal, _createNullPrincipalFromTabUserContextId());
// Allow users to override and continue through to the site,
// but add a notify bar as a reminder, so that they don't lose
// track after, e.g., tab switching.

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

@ -213,9 +213,7 @@ ContentRestoreInternal.prototype = {
}
let postData = loadArguments.postData ?
E10SUtils.makeInputStream(loadArguments.postData) : null;
let triggeringPrincipal = loadArguments.triggeringPrincipal
? E10SUtils.deserializePrincipal(loadArguments.triggeringPrincipal)
: Services.scriptSecurityManager.createNullPrincipal({});
let triggeringPrincipal = E10SUtils.deserializePrincipal(loadArguments.triggeringPrincipal, () => Services.scriptSecurityManager.createNullPrincipal({}));
if (loadArguments.userContextId) {
webNavigation.setOriginAttributesBeforeLoading({ userContextId: loadArguments.userContextId });

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

@ -104,12 +104,11 @@ class WebNavigationChild extends ActorChild {
if (baseURI)
baseURI = Services.io.newURI(baseURI);
this._assert(triggeringPrincipal, "We need a triggering principal to continue loading", new Error().lineNumber);
if (triggeringPrincipal)
triggeringPrincipal = E10SUtils.deserializePrincipal(triggeringPrincipal);
this._assert(triggeringPrincipal, "Unable to deserialize passed triggering principal", new Error().lineNumber);
if (!triggeringPrincipal) {
triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal({});
}
triggeringPrincipal = E10SUtils.deserializePrincipal(triggeringPrincipal, () => {
this._assert(false, "Unable to deserialize passed triggering principal", new Error().lineNumber);
return Services.scriptSecurityManager.getSystemPrincipal({});
});
let loadURIOptions = {
triggeringPrincipal,

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

@ -329,9 +329,15 @@ var E10SUtils = {
* @param {String} principal_b64 A base64 encoded serialized principal.
* @return {nsIPrincipal} A deserialized principal.
*/
deserializePrincipal(principal_b64) {
if (!principal_b64)
return null;
deserializePrincipal(principal_b64, fallbackPrincipalCallback = null) {
if (!principal_b64) {
if (!fallbackPrincipalCallback) {
debug("No principal passed to deserializePrincipal and no fallbackPrincipalCallback");
return null;
}
return fallbackPrincipalCallback();
}
try {
let principal = serializationHelper.deserializeObject(principal_b64);
@ -340,7 +346,11 @@ var E10SUtils = {
} catch (e) {
debug(`Failed to deserialize principal_b64 '${principal_b64}' ${e}`);
}
return null;
if (!fallbackPrincipalCallback) {
debug("No principal passed to deserializePrincipal and no fallbackPrincipalCallback");
return null;
}
return fallbackPrincipalCallback();
},
shouldLoadURIInBrowser(browser, uri, multiProcess = true,

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

@ -450,13 +450,12 @@ var SessionHistoryInternal = {
}
if (entry.triggeringPrincipal_base64) {
shEntry.triggeringPrincipal = E10SUtils.deserializePrincipal(entry.triggeringPrincipal_base64);
}
// Ensure that we have a null principal if we couldn't deserialize it.
// This won't always work however is safe to use.
if (!shEntry.triggeringPrincipal) {
debug("Couldn't deserialize the triggeringPrincipal, falling back to NullPrincipal");
shEntry.triggeringPrincipal = Services.scriptSecurityManager.createNullPrincipal({});
shEntry.triggeringPrincipal = E10SUtils.deserializePrincipal(entry.triggeringPrincipal_base64, () => {
// Ensure that we have a null principal if we couldn't deserialize it.
// This won't always work however is safe to use.
debug("Couldn't deserialize the triggeringPrincipal, falling back to NullPrincipal");
return Services.scriptSecurityManager.createNullPrincipal({});
});
}
if (entry.principalToInherit_base64) {
shEntry.principalToInherit = E10SUtils.deserializePrincipal(entry.principalToInherit_base64);