Skip to content

Commit

Permalink
Bug 906190 - Persist 'disable protection' option for Mixed Content Bl…
Browse files Browse the repository at this point in the history
…ocker in child tabs - tabbrowser part. r=gavin
  • Loading branch information
rmottola committed Aug 25, 2019
1 parent 97031e9 commit 7467fee
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 5 deletions.
21 changes: 19 additions & 2 deletions browser/base/content/browser.js
Expand Up @@ -5075,9 +5075,26 @@ function handleLinkClick(event, href, linkNode) {
return true;
}

var referrerURI = doc.documentURIObject;
// if the mixedContentChannel is present and the referring URI passes
// a same origin check with the target URI, we can preserve the users
// decision of disabling MCB on a page for it's child tabs.
var persistDisableMCBInChildTab = false;

if (where == "tab" && gBrowser.docShell.mixedContentChannel) {
const sm = Services.scriptSecurityManager;
try {
var targetURI = makeURI(href);
sm.checkSameOriginURI(referrerURI, targetURI, false);
persistDisableMCBInChildTab = true;
}
catch (e) { }
}

urlSecurityCheck(href, doc.nodePrincipal);
openLinkIn(href, where, { referrerURI: doc.documentURIObject,
charset: doc.characterSet });
openLinkIn(href, where, { referrerURI: referrerURI,
charset: doc.characterSet,
disableMCB: persistDisableMCBInChildTab});
event.preventDefault();
return true;
}
Expand Down
20 changes: 19 additions & 1 deletion browser/base/content/nsContextMenu.js
Expand Up @@ -762,9 +762,27 @@ nsContextMenu.prototype = {
openLinkInTab: function() {
var doc = this.target.ownerDocument;
urlSecurityCheck(this.linkURL, doc.nodePrincipal);
var referrerURI = doc.documentURIObject;

// if the mixedContentChannel is present and the referring URI passes
// a same origin check with the target URI, we can preserve the users
// decision of disabling MCB on a page for it's child tabs.
var persistDisableMCBInChildTab = false;

if (this.browser.docShell.mixedContentChannel) {
const sm = Services.scriptSecurityManager;
try {
var targetURI = this.linkURI;
sm.checkSameOriginURI(referrerURI, targetURI, false);
persistDisableMCBInChildTab = true;
}
catch (e) { }
}

openLinkIn(this.linkURL, "tab",
{ charset: doc.characterSet,
referrerURI: doc.documentURIObject });
referrerURI: referrerURI,
disableMCB: persistDisableMCBInChildTab});
},

// open URL in current tab
Expand Down
9 changes: 8 additions & 1 deletion browser/base/content/tabbrowser.xml
Expand Up @@ -1254,6 +1254,7 @@
<![CDATA[
var aFromExternal;
var aRelatedToCurrent;
var aDisableMCB;
if (arguments.length == 2 &&
typeof arguments[1] == "object" &&
!(arguments[1] instanceof Ci.nsIURI)) {
Expand All @@ -1265,6 +1266,7 @@
aAllowThirdPartyFixup = params.allowThirdPartyFixup;
aFromExternal = params.fromExternal;
aRelatedToCurrent = params.relatedToCurrent;
aDisableMCB = params.disableMCB;
}
var bgLoad = (aLoadInBackground != null) ? aLoadInBackground :
Expand All @@ -1277,7 +1279,8 @@
ownerTab: owner,
allowThirdPartyFixup: aAllowThirdPartyFixup,
fromExternal: aFromExternal,
relatedToCurrent: aRelatedToCurrent});
relatedToCurrent: aRelatedToCurrent,
disableMCB: aDisableMCB});
if (!bgLoad)
this.selectedTab = tab;
Expand Down Expand Up @@ -1351,6 +1354,7 @@
var aFromExternal;
var aRelatedToCurrent;
var aSkipAnimation;
var aDisableMCB;
if (arguments.length == 2 &&
typeof arguments[1] == "object" &&
!(arguments[1] instanceof Ci.nsIURI)) {
Expand All @@ -1363,6 +1367,7 @@
aFromExternal = params.fromExternal;
aRelatedToCurrent = params.relatedToCurrent;
aSkipAnimation = params.skipAnimation;
aDisableMCB = params.disableMCB;
}
// if we're adding tabs, we're past interrupt mode, ditch the owner
Expand Down Expand Up @@ -1522,6 +1527,8 @@
}
if (aFromExternal)
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_FROM_EXTERNAL;
if (aDisableMCB)
flags |= Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_MIXED_CONTENT;
try {
b.loadURIWithFlags(aURI, flags, aReferrerURI, aCharset, aPostData);
} catch (ex) {
Expand Down
4 changes: 3 additions & 1 deletion browser/base/content/utilityOverlay.js
Expand Up @@ -215,6 +215,7 @@ function openLinkIn(url, where, params) {
var aCharset = params.charset;
var aReferrerURI = params.referrerURI;
var aRelatedToCurrent = params.relatedToCurrent;
var aDisableMCB = params.disableMCB;
var aInBackground = params.inBackground;
var aDisallowInheritPrincipal = params.disallowInheritPrincipal;
var aInitiatingDoc = params.initiatingDoc;
Expand Down Expand Up @@ -328,7 +329,8 @@ function openLinkIn(url, where, params) {
postData: aPostData,
inBackground: loadInBackground,
allowThirdPartyFixup: aAllowThirdPartyFixup,
relatedToCurrent: aRelatedToCurrent});
relatedToCurrent: aRelatedToCurrent,
disableMCB: aDisableMCB});
break;
}

Expand Down

0 comments on commit 7467fee

Please sign in to comment.