mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-22 15:17:29 +09:00
Bug 1331686 - Pass correct triggeringPrincipal for tabs openen through ctrl-click and open link in new tab
This commit is contained in:
parent
f563201762
commit
9b3581eddb
5 changed files with 38 additions and 6 deletions
|
|
@ -71,6 +71,16 @@ XPCOMUtils.defineLazyModuleGetter(this, "SafeBrowsing",
|
||||||
["gDNSService", "@mozilla.org/network/dns-service;1", "nsIDNSService"],
|
["gDNSService", "@mozilla.org/network/dns-service;1", "nsIDNSService"],
|
||||||
].forEach(([name, cc, ci]) => XPCOMUtils.defineLazyServiceGetter(this, name, cc, ci));
|
].forEach(([name, cc, ci]) => XPCOMUtils.defineLazyServiceGetter(this, name, cc, ci));
|
||||||
|
|
||||||
|
XPCOMUtils.defineLazyServiceGetter(this, "gSerializationHelper",
|
||||||
|
"@mozilla.org/network/serialization-helper;1",
|
||||||
|
"nsISerializationHelper");
|
||||||
|
|
||||||
|
XPCOMUtils.defineLazyGetter(this, "BrowserToolboxProcess", function() {
|
||||||
|
let tmp = {};
|
||||||
|
Cu.import("resource://devtools/client/framework/ToolboxProcess.jsm", tmp);
|
||||||
|
return tmp.BrowserToolboxProcess;
|
||||||
|
});
|
||||||
|
|
||||||
XPCOMUtils.defineLazyGetter(this, "gBrowserBundle", function() {
|
XPCOMUtils.defineLazyGetter(this, "gBrowserBundle", function() {
|
||||||
return Services.strings.createBundle('chrome://browser/locale/browser.properties');
|
return Services.strings.createBundle('chrome://browser/locale/browser.properties');
|
||||||
});
|
});
|
||||||
|
|
@ -806,6 +816,7 @@ function _loadURIWithFlags(browser, uri, params) {
|
||||||
if (!uri) {
|
if (!uri) {
|
||||||
uri = "about:blank";
|
uri = "about:blank";
|
||||||
}
|
}
|
||||||
|
let triggeringPrincipal = params.triggeringPrincipal || null;
|
||||||
let flags = params.flags || 0;
|
let flags = params.flags || 0;
|
||||||
let referrer = params.referrerURI;
|
let referrer = params.referrerURI;
|
||||||
let referrerPolicy = ('referrerPolicy' in params ? params.referrerPolicy :
|
let referrerPolicy = ('referrerPolicy' in params ? params.referrerPolicy :
|
||||||
|
|
@ -830,7 +841,7 @@ function _loadURIWithFlags(browser, uri, params) {
|
||||||
|
|
||||||
browser.webNavigation.loadURIWithOptions(uri, flags,
|
browser.webNavigation.loadURIWithOptions(uri, flags,
|
||||||
referrer, referrerPolicy,
|
referrer, referrerPolicy,
|
||||||
postData, null, null);
|
postData, null, null, triggeringPrincipal);
|
||||||
} else {
|
} else {
|
||||||
// Check if the current browser is allowed to unload.
|
// Check if the current browser is allowed to unload.
|
||||||
let {permitUnload, timedOut} = browser.permitUnload();
|
let {permitUnload, timedOut} = browser.permitUnload();
|
||||||
|
|
@ -844,6 +855,9 @@ function _loadURIWithFlags(browser, uri, params) {
|
||||||
|
|
||||||
let loadParams = {
|
let loadParams = {
|
||||||
uri: uri,
|
uri: uri,
|
||||||
|
triggeringPrincipal: triggeringPrincipal
|
||||||
|
? gSerializationHelper.serializePrincipal(triggeringPrincipal)
|
||||||
|
: null,
|
||||||
flags: flags,
|
flags: flags,
|
||||||
referrer: referrer ? referrer.spec : null,
|
referrer: referrer ? referrer.spec : null,
|
||||||
referrerPolicy: referrerPolicy,
|
referrerPolicy: referrerPolicy,
|
||||||
|
|
@ -871,7 +885,7 @@ function _loadURIWithFlags(browser, uri, params) {
|
||||||
}
|
}
|
||||||
|
|
||||||
browser.webNavigation.loadURIWithOptions(uri, flags, referrer, referrerPolicy,
|
browser.webNavigation.loadURIWithOptions(uri, flags, referrer, referrerPolicy,
|
||||||
postData, null, null);
|
postData, null, null, triggeringPrincipal);
|
||||||
} else {
|
} else {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
@ -4838,7 +4852,7 @@ nsBrowserAccess.prototype = {
|
||||||
_openURIInNewTab: function(aURI, aReferrer, aReferrerPolicy, aIsPrivate,
|
_openURIInNewTab: function(aURI, aReferrer, aReferrerPolicy, aIsPrivate,
|
||||||
aIsExternal, aForceNotRemote=false,
|
aIsExternal, aForceNotRemote=false,
|
||||||
aUserContextId=Ci.nsIScriptSecurityManager.DEFAULT_USER_CONTEXT_ID,
|
aUserContextId=Ci.nsIScriptSecurityManager.DEFAULT_USER_CONTEXT_ID,
|
||||||
aOpener=null) {
|
aOpener = null, aTriggeringPrincipal = null) {
|
||||||
let win, needToFocusWin;
|
let win, needToFocusWin;
|
||||||
|
|
||||||
// try the current window. if we're in a popup, fall back on the most recent browser window
|
// try the current window. if we're in a popup, fall back on the most recent browser window
|
||||||
|
|
@ -4863,6 +4877,7 @@ nsBrowserAccess.prototype = {
|
||||||
let loadInBackground = gPrefService.getBoolPref("browser.tabs.loadDivertedInBackground");
|
let loadInBackground = gPrefService.getBoolPref("browser.tabs.loadDivertedInBackground");
|
||||||
|
|
||||||
let tab = win.gBrowser.loadOneTab(aURI ? aURI.spec : "about:blank", {
|
let tab = win.gBrowser.loadOneTab(aURI ? aURI.spec : "about:blank", {
|
||||||
|
triggeringPrincipal: aTriggeringPrincipal,
|
||||||
referrerURI: aReferrer,
|
referrerURI: aReferrer,
|
||||||
referrerPolicy: aReferrerPolicy,
|
referrerPolicy: aReferrerPolicy,
|
||||||
userContextId: aUserContextId,
|
userContextId: aUserContextId,
|
||||||
|
|
@ -4911,9 +4926,11 @@ nsBrowserAccess.prototype = {
|
||||||
}
|
}
|
||||||
|
|
||||||
let referrer = aOpener ? makeURI(aOpener.location.href) : null;
|
let referrer = aOpener ? makeURI(aOpener.location.href) : null;
|
||||||
|
let triggeringPrincipal = null;
|
||||||
let referrerPolicy = Ci.nsIHttpChannel.REFERRER_POLICY_DEFAULT;
|
let referrerPolicy = Ci.nsIHttpChannel.REFERRER_POLICY_DEFAULT;
|
||||||
if (aOpener && aOpener.document) {
|
if (aOpener && aOpener.document) {
|
||||||
referrerPolicy = aOpener.document.referrerPolicy;
|
referrerPolicy = aOpener.document.referrerPolicy;
|
||||||
|
triggeringPrincipal = aOpener.document.nodePrincipal;
|
||||||
}
|
}
|
||||||
let isPrivate = aOpener
|
let isPrivate = aOpener
|
||||||
? PrivateBrowsingUtils.isContentWindowPrivate(aOpener)
|
? PrivateBrowsingUtils.isContentWindowPrivate(aOpener)
|
||||||
|
|
@ -4947,7 +4964,7 @@ nsBrowserAccess.prototype = {
|
||||||
let browser = this._openURIInNewTab(aURI, referrer, referrerPolicy,
|
let browser = this._openURIInNewTab(aURI, referrer, referrerPolicy,
|
||||||
isPrivate, isExternal,
|
isPrivate, isExternal,
|
||||||
forceNotRemote, userContextId,
|
forceNotRemote, userContextId,
|
||||||
openerWindow);
|
openerWindow, triggeringPrincipal);
|
||||||
if (browser)
|
if (browser)
|
||||||
newWindow = browser.contentWindow;
|
newWindow = browser.contentWindow;
|
||||||
break;
|
break;
|
||||||
|
|
@ -4958,6 +4975,7 @@ nsBrowserAccess.prototype = {
|
||||||
Ci.nsIWebNavigation.LOAD_FLAGS_FROM_EXTERNAL :
|
Ci.nsIWebNavigation.LOAD_FLAGS_FROM_EXTERNAL :
|
||||||
Ci.nsIWebNavigation.LOAD_FLAGS_NONE;
|
Ci.nsIWebNavigation.LOAD_FLAGS_NONE;
|
||||||
gBrowser.loadURIWithFlags(aURI.spec, {
|
gBrowser.loadURIWithFlags(aURI.spec, {
|
||||||
|
triggeringPrincipal,
|
||||||
flags: loadflags,
|
flags: loadflags,
|
||||||
referrerURI: referrer,
|
referrerURI: referrer,
|
||||||
referrerPolicy: referrerPolicy,
|
referrerPolicy: referrerPolicy,
|
||||||
|
|
@ -4986,7 +5004,8 @@ nsBrowserAccess.prototype = {
|
||||||
aParams.referrerPolicy,
|
aParams.referrerPolicy,
|
||||||
aParams.isPrivate,
|
aParams.isPrivate,
|
||||||
isExternal, false,
|
isExternal, false,
|
||||||
userContextId);
|
userContextId, null,
|
||||||
|
aParams.triggeringPrincipal);
|
||||||
if (browser)
|
if (browser)
|
||||||
return browser.QueryInterface(Ci.nsIFrameLoaderOwner);
|
return browser.QueryInterface(Ci.nsIFrameLoaderOwner);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -482,6 +482,7 @@ var ClickEventHandler = {
|
||||||
ctrlKey: event.ctrlKey, metaKey: event.metaKey,
|
ctrlKey: event.ctrlKey, metaKey: event.metaKey,
|
||||||
altKey: event.altKey, href: null, title: null,
|
altKey: event.altKey, href: null, title: null,
|
||||||
bookmark: false, referrerPolicy: referrerPolicy,
|
bookmark: false, referrerPolicy: referrerPolicy,
|
||||||
|
triggeringPrincipal: principal,
|
||||||
originAttributes: principal ? principal.originAttributes : {},
|
originAttributes: principal ? principal.originAttributes : {},
|
||||||
isContentWindowPrivate: PrivateBrowsingUtils.isContentWindowPrivate(ownerDoc.defaultView)};
|
isContentWindowPrivate: PrivateBrowsingUtils.isContentWindowPrivate(ownerDoc.defaultView)};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1525,6 +1525,7 @@
|
||||||
<parameter name="aAllowThirdPartyFixup"/>
|
<parameter name="aAllowThirdPartyFixup"/>
|
||||||
<body>
|
<body>
|
||||||
<![CDATA[
|
<![CDATA[
|
||||||
|
var aTriggeringPrincipal;
|
||||||
var aReferrerPolicy;
|
var aReferrerPolicy;
|
||||||
var aFromExternal;
|
var aFromExternal;
|
||||||
var aRelatedToCurrent;
|
var aRelatedToCurrent;
|
||||||
|
|
@ -1540,6 +1541,7 @@
|
||||||
typeof arguments[1] == "object" &&
|
typeof arguments[1] == "object" &&
|
||||||
!(arguments[1] instanceof Ci.nsIURI)) {
|
!(arguments[1] instanceof Ci.nsIURI)) {
|
||||||
let params = arguments[1];
|
let params = arguments[1];
|
||||||
|
aTriggeringPrincipal = params.triggeringPrincipal
|
||||||
aReferrerURI = params.referrerURI;
|
aReferrerURI = params.referrerURI;
|
||||||
aReferrerPolicy = params.referrerPolicy;
|
aReferrerPolicy = params.referrerPolicy;
|
||||||
aCharset = params.charset;
|
aCharset = params.charset;
|
||||||
|
|
@ -1562,6 +1564,7 @@
|
||||||
Services.prefs.getBoolPref("browser.tabs.loadInBackground");
|
Services.prefs.getBoolPref("browser.tabs.loadInBackground");
|
||||||
var owner = bgLoad ? null : this.selectedTab;
|
var owner = bgLoad ? null : this.selectedTab;
|
||||||
var tab = this.addTab(aURI, {
|
var tab = this.addTab(aURI, {
|
||||||
|
triggeringPrincipal: aTriggeringPrincipal,
|
||||||
referrerURI: aReferrerURI,
|
referrerURI: aReferrerURI,
|
||||||
referrerPolicy: aReferrerPolicy,
|
referrerPolicy: aReferrerPolicy,
|
||||||
charset: aCharset,
|
charset: aCharset,
|
||||||
|
|
@ -2136,6 +2139,7 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
const NS_XUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
const NS_XUL = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||||
|
var aTriggeringPrincipal;
|
||||||
var aReferrerPolicy;
|
var aReferrerPolicy;
|
||||||
var aFromExternal;
|
var aFromExternal;
|
||||||
var aRelatedToCurrent;
|
var aRelatedToCurrent;
|
||||||
|
|
@ -2152,6 +2156,7 @@
|
||||||
typeof arguments[1] == "object" &&
|
typeof arguments[1] == "object" &&
|
||||||
!(arguments[1] instanceof Ci.nsIURI)) {
|
!(arguments[1] instanceof Ci.nsIURI)) {
|
||||||
let params = arguments[1];
|
let params = arguments[1];
|
||||||
|
aTriggeringPrincipal = params.triggeringPrincipal;
|
||||||
aReferrerURI = params.referrerURI;
|
aReferrerURI = params.referrerURI;
|
||||||
aReferrerPolicy = params.referrerPolicy;
|
aReferrerPolicy = params.referrerPolicy;
|
||||||
aCharset = params.charset;
|
aCharset = params.charset;
|
||||||
|
|
@ -2283,6 +2288,7 @@
|
||||||
try {
|
try {
|
||||||
b.loadURIWithFlags(aURI, {
|
b.loadURIWithFlags(aURI, {
|
||||||
flags,
|
flags,
|
||||||
|
triggeringPrincipal: aTriggeringPrincipal,
|
||||||
referrerURI: aNoReferrer ? null: aReferrerURI,
|
referrerURI: aNoReferrer ? null: aReferrerURI,
|
||||||
referrerPolicy: aReferrerPolicy,
|
referrerPolicy: aReferrerPolicy,
|
||||||
charset: aCharset,
|
charset: aCharset,
|
||||||
|
|
|
||||||
|
|
@ -407,6 +407,7 @@ function openLinkIn(url, where, params) {
|
||||||
}
|
}
|
||||||
|
|
||||||
aCurrentBrowser.loadURIWithFlags(url, {
|
aCurrentBrowser.loadURIWithFlags(url, {
|
||||||
|
triggeringPrincipal: aPrincipal,
|
||||||
flags: flags,
|
flags: flags,
|
||||||
referrerURI: aNoReferrer ? null : aReferrerURI,
|
referrerURI: aNoReferrer ? null : aReferrerURI,
|
||||||
referrerPolicy: aReferrerPolicy,
|
referrerPolicy: aReferrerPolicy,
|
||||||
|
|
@ -432,6 +433,7 @@ function openLinkIn(url, where, params) {
|
||||||
noReferrer: aNoReferrer,
|
noReferrer: aNoReferrer,
|
||||||
userContextId: aUserContextId,
|
userContextId: aUserContextId,
|
||||||
originPrincipal: aPrincipal,
|
originPrincipal: aPrincipal,
|
||||||
|
triggeringPrincipal: aPrincipal,
|
||||||
});
|
});
|
||||||
browserUsedForLoad = tabUsedForLoad.linkedBrowser;
|
browserUsedForLoad = tabUsedForLoad.linkedBrowser;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -135,6 +135,7 @@
|
||||||
aURI = "about:blank";
|
aURI = "about:blank";
|
||||||
|
|
||||||
var aReferrerPolicy = Components.interfaces.nsIHttpChannel.REFERRER_POLICY_DEFAULT;
|
var aReferrerPolicy = Components.interfaces.nsIHttpChannel.REFERRER_POLICY_DEFAULT;
|
||||||
|
var aTriggeringPrincipal;
|
||||||
|
|
||||||
// Check for loadURIWithFlags(uri, { ... });
|
// Check for loadURIWithFlags(uri, { ... });
|
||||||
var params = arguments[1];
|
var params = arguments[1];
|
||||||
|
|
@ -144,6 +145,9 @@
|
||||||
if ('referrerPolicy' in params) {
|
if ('referrerPolicy' in params) {
|
||||||
aReferrerPolicy = params.referrerPolicy;
|
aReferrerPolicy = params.referrerPolicy;
|
||||||
}
|
}
|
||||||
|
if ("triggeringPrincipal" in params) {
|
||||||
|
aTriggeringPrincipal = params.triggeringPrincipal;
|
||||||
|
}
|
||||||
aCharset = params.charset;
|
aCharset = params.charset;
|
||||||
aPostData = params.postData;
|
aPostData = params.postData;
|
||||||
}
|
}
|
||||||
|
|
@ -151,7 +155,7 @@
|
||||||
this._wrapURIChangeCall(() =>
|
this._wrapURIChangeCall(() =>
|
||||||
this.webNavigation.loadURIWithOptions(
|
this.webNavigation.loadURIWithOptions(
|
||||||
aURI, aFlags, aReferrerURI, aReferrerPolicy,
|
aURI, aFlags, aReferrerURI, aReferrerPolicy,
|
||||||
aPostData, null, null));
|
aPostData, null, null, aTriggeringPrincipal));
|
||||||
]]>
|
]]>
|
||||||
</body>
|
</body>
|
||||||
</method>
|
</method>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue