Bug 1363975 - Have loadOneTab() provide the correct triggeringPrincipal. r=gijs,smaug

This commit is contained in:
Christoph Kerschbaumer 2017-05-31 20:59:02 +02:00
parent 7c190eb1cc
commit 0944826c8a
12 changed files with 57 additions and 25 deletions

View File

@ -3,7 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* eslint-env mozilla/browser-window */
/* global OpenGraphBuilder:false, DynamicResizeWatcher:false */
/* global OpenGraphBuilder:false, DynamicResizeWatcher:false, Utils:false*/
// the "exported" symbols
var SocialUI,
@ -25,6 +25,12 @@ XPCOMUtils.defineLazyGetter(this, "DynamicResizeWatcher", function() {
return tmp.DynamicResizeWatcher;
});
XPCOMUtils.defineLazyGetter(this, "Utils", function() {
let tmp = {};
Cu.import("resource://gre/modules/sessionstore/Utils.jsm", tmp);
return tmp.Utils;
});
let messageManager = window.messageManager;
let openUILinkIn = window.openUILinkIn;
@ -203,7 +209,11 @@ SocialActivationListener = {
if (provider.postActivationURL) {
// if activated from an open share panel, we load the landing page in
// a background tab
gBrowser.loadOneTab(provider.postActivationURL, {inBackground: SocialShare.panel.state == "open"});
let triggeringPrincipal = Utils.deserializePrincipal(aMessage.data.triggeringPrincipal);
gBrowser.loadOneTab(provider.postActivationURL, {
inBackground: SocialShare.panel.state == "open",
triggeringPrincipal,
});
}
});
}, options);

View File

@ -2291,11 +2291,14 @@ function delayedOpenWindow(chrome, flags, href, postData) {
the URI kicked off before becoming the active content area. */
function delayedOpenTab(aUrl, aReferrer, aCharset, aPostData, aAllowThirdPartyFixup) {
gBrowser.loadOneTab(aUrl, {
referrerURI: aReferrer,
charset: aCharset,
postData: aPostData,
inBackground: false,
allowThirdPartyFixup: aAllowThirdPartyFixup});
referrerURI: aReferrer,
charset: aCharset,
postData: aPostData,
inBackground: false,
allowThirdPartyFixup: aAllowThirdPartyFixup,
// Bug 1367168: only use systemPrincipal till we can remove that function
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
});
}
var gLastOpenDirectory = {
@ -2603,7 +2606,8 @@ function BrowserViewSourceOfDocument(aArgsOrDocument) {
relatedToCurrent: true,
inBackground: false,
preferredRemoteType,
sameProcessAsFrameLoader: args.browser ? args.browser.frameLoader : null
sameProcessAsFrameLoader: args.browser ? args.browser.frameLoader : null,
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
});
args.viewSourceBrowser = tabBrowser.getBrowserForTab(tab);
top.gViewSourceUtils.viewSourceInBrowser(args);
@ -3412,7 +3416,8 @@ var PrintPreviewListener = {
return gBrowser.loadOneTab("about:printpreview", {
inBackground: true,
preferredRemoteType,
sameProcessAsFrameLoader: browser.frameLoader
sameProcessAsFrameLoader: browser.frameLoader,
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
});
},
getPrintPreviewBrowser() {
@ -3437,7 +3442,8 @@ var PrintPreviewListener = {
let browser = this.getSourceBrowser();
this._simplifyPageTab = gBrowser.loadOneTab("about:printpreview", {
inBackground: true,
sameProcessAsFrameLoader: browser.frameLoader
sameProcessAsFrameLoader: browser.frameLoader,
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
});
return this.getSimplifiedSourceBrowser();
},

View File

@ -41,6 +41,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "PageMetadata",
"resource://gre/modules/PageMetadata.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "PlacesUIUtils",
"resource:///modules/PlacesUIUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Utils",
"resource://gre/modules/sessionstore/Utils.jsm");
XPCOMUtils.defineLazyGetter(this, "PageMenuChild", function() {
let tmp = {};
Cu.import("resource://gre/modules/PageMenu.jsm", tmp);
@ -808,7 +810,8 @@ addEventListener("ActivateSocialFeature", function(aEvent) {
sendAsyncMessage("Social:Activation", {
url: ownerDocument.location.href,
origin: ownerDocument.nodePrincipal.origin,
manifest: data
manifest: data,
triggeringPrincipal: Utils.serializePrincipal(ownerDocument.nodePrincipal),
});
}, true, true);

View File

@ -1179,7 +1179,8 @@ nsContextMenu.prototype = {
}
let tab = tabBrowser.loadOneTab("about:blank", {
relatedToCurrent: true,
inBackground: false
inBackground: false,
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
});
return tabBrowser.getBrowserForTab(tab);
}

View File

@ -16,6 +16,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "E10SUtils",
"resource:///modules/E10SUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "BrowserUtils",
"resource://gre/modules/BrowserUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Utils",
"resource://gre/modules/sessionstore/Utils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
"resource://gre/modules/PrivateBrowsingUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "AboutReader",
@ -657,7 +659,7 @@ let PrerenderContentHandler = {
}
},
startPrerenderingDocument(aHref, aReferrer) {
startPrerenderingDocument(aHref, aReferrer, aTriggeringPrincipal) {
// XXX: Make this constant a pref
if (this._pending.length >= 2) {
return;
@ -668,6 +670,7 @@ let PrerenderContentHandler = {
href: aHref.spec,
referrer: aReferrer ? aReferrer.spec : null,
id,
triggeringPrincipal: Utils.serializePrincipal(aTriggeringPrincipal),
});
this._pending.push({
@ -729,9 +732,9 @@ var WebBrowserChrome = {
return true;
},
startPrerenderingDocument(aHref, aReferrer) {
startPrerenderingDocument(aHref, aReferrer, aTriggeringPrincipal) {
if (PrerenderContentHandler.initialized) {
PrerenderContentHandler.startPrerenderingDocument(aHref, aReferrer);
PrerenderContentHandler.startPrerenderingDocument(aHref, aReferrer, aTriggeringPrincipal);
}
},

View File

@ -5211,6 +5211,7 @@
allowThirdPartyFixup: true,
relatedToCurrent: true,
isPrerendered: true,
triggeringPrincipal: Utils.deserializePrincipal(data.triggeringPrincipal),
});
let partialSHistory = newTab.linkedBrowser.frameLoader.partialSHistory;
groupedSHistory.addPrerenderingPartialSHistory(partialSHistory, data.id);

View File

@ -218,10 +218,12 @@ CustomizeMode.prototype = {
}
if (!gTab) {
this.setTab(this.browser.loadOneTab("about:blank",
{ inBackground: false,
forceNotRemote: true,
skipAnimation: true }));
this.setTab(this.browser.loadOneTab("about:blank", {
inBackground: false,
forceNotRemote: true,
skipAnimation: true,
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
}));
return;
}
if (!gTab.selected) {

View File

@ -121,7 +121,7 @@ let WebCompatReporter = {
let tab = gBrowser.loadOneTab(
`${WebCompatReporter.endpoint}?url=${encodeURIComponent(tabData.url)}&src=desktop-reporter`,
{inBackground: false});
{inBackground: false, triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()});
// If we successfully got a screenshot blob, add a listener to know when
// the new tab is loaded before sending it over.

View File

@ -3145,7 +3145,7 @@ nsIDocument::PrerenderHref(nsIURI* aHref)
tabChild->GetWebBrowserChrome(getter_AddRefs(wbc3));
NS_ENSURE_TRUE(wbc3, false);
rv = wbc3->StartPrerenderingDocument(aHref, referrer);
rv = wbc3->StartPrerenderingDocument(aHref, referrer, NodePrincipal());
NS_ENSURE_SUCCESS(rv, false);
return true;

View File

@ -79,8 +79,11 @@ interface nsIWebBrowserChrome3 : nsIWebBrowserChrome2
*
* @param aHref The URI to begin prerendering
* @param aReferrer The URI of the document requesting the prerender.
* @param aTriggeringPrincipal The Principal that initiated to load aHref
*/
void startPrerenderingDocument(in nsIURI aHref, in nsIURI aReferrer);
void startPrerenderingDocument(in nsIURI aHref,
in nsIURI aReferrer,
in nsIPrincipal aTriggeringPrincipal);
/**
* Check if there's a prerendered document which matches given URI /

View File

@ -482,8 +482,10 @@ var TelemetryReportingPolicyImpl = {
win.addEventListener("unload", removeListeners);
win.gBrowser.addTabsProgressListener(progressListener);
tab = win.gBrowser.loadOneTab(firstRunPolicyURL, { inBackground: true });
tab = win.gBrowser.loadOneTab(firstRunPolicyURL, {
inBackground: true,
triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
});
return true;
},

View File

@ -429,7 +429,8 @@ NS_IMETHODIMP nsContentTreeOwner::ReloadInFreshProcess(nsIDocShell* aDocShell,
}
NS_IMETHODIMP nsContentTreeOwner::StartPrerenderingDocument(nsIURI* aHref,
nsIURI* aReferrer)
nsIURI* aReferrer,
nsIPrincipal* aTriggeringPrincipal)
{
NS_WARNING("Cannot prerender a document in the parent process");
return NS_ERROR_FAILURE;