Bug 1344706 - Do not reuse originPrincipal as triggeringPrincipal within utilityOverlay.js

This commit is contained in:
janekptacijarabaci 2018-05-01 00:22:01 +02:00 • committed by Roy Tam
commit cf54612b55
5 changed files with 25 additions and 11 deletions

View file

@ -1177,6 +1177,7 @@ var gBrowserInit = {
// [5]: referrerPolicy (int) // [5]: referrerPolicy (int)
// [6]: userContextId (int) // [6]: userContextId (int)
// [7]: originPrincipal (nsIPrincipal) // [7]: originPrincipal (nsIPrincipal)
// [8]: triggeringPrincipal (nsIPrincipal)
else if (window.arguments.length >= 3) { else if (window.arguments.length >= 3) {
let referrerURI = window.arguments[2]; let referrerURI = window.arguments[2];
if (typeof(referrerURI) == "string") { if (typeof(referrerURI) == "string") {
@ -1194,7 +1195,7 @@ var gBrowserInit = {
window.arguments[4] || false, referrerPolicy, userContextId, window.arguments[4] || false, referrerPolicy, userContextId,
// pass the origin principal (if any) and force its use to create // pass the origin principal (if any) and force its use to create
// an initial about:blank viewer if present: // an initial about:blank viewer if present:
window.arguments[7], !!window.arguments[7]); window.arguments[7], !!window.arguments[7], window.arguments[8]);
window.focus(); window.focus();
} }
// Note: loadOneOrMoreURIs *must not* be called if window.arguments.length >= 3. // Note: loadOneOrMoreURIs *must not* be called if window.arguments.length >= 3.
@ -2080,7 +2081,8 @@ function BrowserTryToCloseWindow()
} }
function loadURI(uri, referrer, postData, allowThirdPartyFixup, referrerPolicy, function loadURI(uri, referrer, postData, allowThirdPartyFixup, referrerPolicy,
userContextId, originPrincipal, forceAboutBlankViewerInCurrent) { userContextId, originPrincipal, forceAboutBlankViewerInCurrent,
triggeringPrincipal) {
try { try {
openLinkIn(uri, "current", openLinkIn(uri, "current",
{ referrerURI: referrer, { referrerURI: referrer,
@ -2089,6 +2091,7 @@ function loadURI(uri, referrer, postData, allowThirdPartyFixup, referrerPolicy,
allowThirdPartyFixup: allowThirdPartyFixup, allowThirdPartyFixup: allowThirdPartyFixup,
userContextId: userContextId, userContextId: userContextId,
originPrincipal, originPrincipal,
triggeringPrincipal,
forceAboutBlankViewerInCurrent, forceAboutBlankViewerInCurrent,
}); });
} catch (e) {} } catch (e) {}
@ -5559,6 +5562,7 @@ function handleLinkClick(event, href, linkNode) {
referrerPolicy: referrerPolicy, referrerPolicy: referrerPolicy,
noReferrer: BrowserUtils.linkHasNoReferrer(linkNode), noReferrer: BrowserUtils.linkHasNoReferrer(linkNode),
originPrincipal: doc.nodePrincipal, originPrincipal: doc.nodePrincipal,
triggeringPrincipal: doc.nodePrincipal,
}; };
// The new tab/window must use the same userContextId // The new tab/window must use the same userContextId

View file

@ -522,6 +522,7 @@ var ClickEventHandler = {
} catch (e) {} } catch (e) {}
} }
json.originPrincipal = ownerDoc.nodePrincipal; json.originPrincipal = ownerDoc.nodePrincipal;
json.triggeringPrincipal = ownerDoc.nodePrincipal;
sendAsyncMessage("Content:Click", json); sendAsyncMessage("Content:Click", json);
return; return;

View file

@ -968,6 +968,7 @@ nsContextMenu.prototype = {
_openLinkInParameters : function (extra) { _openLinkInParameters : function (extra) {
let params = { charset: gContextMenuContentData.charSet, let params = { charset: gContextMenuContentData.charSet,
originPrincipal: this.principal, originPrincipal: this.principal,
triggeringPrincipal: this.principal,
referrerURI: gContextMenuContentData.documentURIObject, referrerURI: gContextMenuContentData.documentURIObject,
referrerPolicy: gContextMenuContentData.referrerPolicy, referrerPolicy: gContextMenuContentData.referrerPolicy,
noReferrer: this.linkHasNoReferrer }; noReferrer: this.linkHasNoReferrer };
@ -1152,7 +1153,7 @@ nsContextMenu.prototype = {
this._canvasToBlobURL(this.target).then(function(blobURL) { this._canvasToBlobURL(this.target).then(function(blobURL) {
openUILink(blobURL, e, { disallowInheritPrincipal: true, openUILink(blobURL, e, { disallowInheritPrincipal: true,
referrerURI: referrerURI, referrerURI: referrerURI,
originPrincipal: systemPrincipal}); triggeringPrincipal: systemPrincipal});
}, Cu.reportError); }, Cu.reportError);
} }
else { else {

View file

@ -225,6 +225,7 @@ function openLinkIn(url, where, params) {
var aUserContextId = params.userContextId; var aUserContextId = params.userContextId;
var aIndicateErrorPageLoad = params.indicateErrorPageLoad; var aIndicateErrorPageLoad = params.indicateErrorPageLoad;
var aPrincipal = params.originPrincipal; var aPrincipal = params.originPrincipal;
var aTriggeringPrincipal = params.triggeringPrincipal;
var aForceAboutBlankViewerInCurrent = var aForceAboutBlankViewerInCurrent =
params.forceAboutBlankViewerInCurrent; params.forceAboutBlankViewerInCurrent;
@ -264,13 +265,18 @@ function openLinkIn(url, where, params) {
// Please note we do not have to do that for SystemPrincipals and we // Please note we do not have to do that for SystemPrincipals and we
// can not do it for NullPrincipals since NullPrincipals are only // can not do it for NullPrincipals since NullPrincipals are only
// identical if they actually are the same object (See Bug: 1346759) // identical if they actually are the same object (See Bug: 1346759)
if (aPrincipal && aPrincipal.isCodebasePrincipal) { function useOAForPrincipal(principal) {
let attrs = { if (principal && principal.isCodebasePrincipal) {
userContextId: aUserContextId, let attrs = {
privateBrowsingId: aIsPrivate || (w && PrivateBrowsingUtils.isWindowPrivate(w)), userContextId: aUserContextId,
}; privateBrowsingId: aIsPrivate || (w && PrivateBrowsingUtils.isWindowPrivate(w)),
aPrincipal = Services.scriptSecurityManager.createCodebasePrincipal(aPrincipal.URI, attrs); };
return Services.scriptSecurityManager.createCodebasePrincipal(principal.URI, attrs);
}
return principal;
} }
aPrincipal = useOAForPrincipal(aPrincipal);
aTriggeringPrincipal = useOAForPrincipal(aTriggeringPrincipal);
if (!w || where == "window") { if (!w || where == "window") {
// Strip referrer data when opening a new private window, to prevent // Strip referrer data when opening a new private window, to prevent
@ -321,6 +327,7 @@ function openLinkIn(url, where, params) {
sa.appendElement(referrerPolicySupports, /* weak =*/ false); sa.appendElement(referrerPolicySupports, /* weak =*/ false);
sa.appendElement(userContextIdSupports, /* weak =*/ false); sa.appendElement(userContextIdSupports, /* weak =*/ false);
sa.appendElement(aPrincipal, /* weak =*/ false); sa.appendElement(aPrincipal, /* weak =*/ false);
sa.appendElement(aTriggeringPrincipal, /* weak =*/ false);
let features = "chrome,dialog=no,all"; let features = "chrome,dialog=no,all";
if (aIsPrivate) { if (aIsPrivate) {
@ -407,7 +414,7 @@ function openLinkIn(url, where, params) {
} }
aCurrentBrowser.loadURIWithFlags(url, { aCurrentBrowser.loadURIWithFlags(url, {
triggeringPrincipal: aPrincipal, triggeringPrincipal: aTriggeringPrincipal,
flags: flags, flags: flags,
referrerURI: aNoReferrer ? null : aReferrerURI, referrerURI: aNoReferrer ? null : aReferrerURI,
referrerPolicy: aReferrerPolicy, referrerPolicy: aReferrerPolicy,
@ -433,7 +440,7 @@ function openLinkIn(url, where, params) {
noReferrer: aNoReferrer, noReferrer: aNoReferrer,
userContextId: aUserContextId, userContextId: aUserContextId,
originPrincipal: aPrincipal, originPrincipal: aPrincipal,
triggeringPrincipal: aPrincipal, triggeringPrincipal: aTriggeringPrincipal,
}); });
browserUsedForLoad = tabUsedForLoad.linkedBrowser; browserUsedForLoad = tabUsedForLoad.linkedBrowser;
break; break;

View file

@ -85,6 +85,7 @@ var ContentClick = {
allowMixedContent: json.allowMixedContent, allowMixedContent: json.allowMixedContent,
isContentWindowPrivate: json.isContentWindowPrivate, isContentWindowPrivate: json.isContentWindowPrivate,
originPrincipal: json.originPrincipal, originPrincipal: json.originPrincipal,
triggeringPrincipal: json.triggeringPrincipal,
}; };
// The new tab/window must use the same userContextId. // The new tab/window must use the same userContextId.