[Pale-Moon] Issue #1717 - Differentiate DV & EV Mixed Content

UXP drops STATE_IDENTITY_EV_TOPLEVEL for Mixed Content.
If we want to have different behaviors between DV and EV, we need to use nsISSLStatus.
This commit is contained in:
Andy 2020-08-14 15:59:29 -07:00 • committed by Roy Tam
commit 66a5df11c1

View file

@ -21,36 +21,15 @@ var padlock_PadLock =
const wpl = Ci.nsIWebProgressListener; const wpl = Ci.nsIWebProgressListener;
const wpl_security_bits = wpl.STATE_IS_SECURE | const wpl_security_bits = wpl.STATE_IS_SECURE |
wpl.STATE_IS_BROKEN | wpl.STATE_IS_BROKEN |
wpl.STATE_IS_INSECURE | wpl.STATE_IS_INSECURE;
wpl.STATE_LOADED_MIXED_ACTIVE_CONTENT |
wpl.STATE_LOADED_MIXED_DISPLAY_CONTENT |
wpl.STATE_IDENTITY_EV_TOPLEVEL;
var level; var level;
var highlight_urlbar = false; var highlight_urlbar = false;
switch (aState & wpl_security_bits) { switch (aState & wpl_security_bits) {
case wpl.STATE_IS_SECURE | wpl.STATE_IDENTITY_EV_TOPLEVEL:
level = "ev";
highlight_urlbar = true;
break;
case wpl.STATE_IS_SECURE: case wpl.STATE_IS_SECURE:
case wpl.STATE_IS_BROKEN |
wpl.STATE_LOADED_MIXED_DISPLAY_CONTENT:
level = "high"; level = "high";
highlight_urlbar = true; highlight_urlbar = true;
break; break;
case wpl.STATE_IS_BROKEN |
wpl.STATE_LOADED_MIXED_ACTIVE_CONTENT:
level = "low";
highlight_urlbar = true;
break;
case wpl.STATE_IS_BROKEN | wpl.STATE_IDENTITY_EV_TOPLEVEL |
wpl.STATE_LOADED_MIXED_ACTIVE_CONTENT |
wpl.STATE_LOADED_MIXED_DISPLAY_CONTENT:
case wpl.STATE_IS_BROKEN | wpl.STATE_IDENTITY_EV_TOPLEVEL |
wpl.STATE_LOADED_MIXED_ACTIVE_CONTENT:
case wpl.STATE_IS_BROKEN | wpl.STATE_IDENTITY_EV_TOPLEVEL |
wpl.STATE_LOADED_MIXED_DISPLAY_CONTENT:
case wpl.STATE_IS_BROKEN: case wpl.STATE_IS_BROKEN:
level = "broken"; level = "broken";
highlight_urlbar = true; highlight_urlbar = true;
@ -59,12 +38,25 @@ var padlock_PadLock =
level = null; level = null;
} }
if (level != null && level != "broken") { if (level != null) {
var secUI = gBrowser.securityUI; var secUI = gBrowser.securityUI;
//if we wanted, we could use secUI.state instead of aState above? //if we wanted, we could use secUI.state instead of aState above?
var secState = secUI.QueryInterface(Ci.nsISSLStatusProvider).SSLStatus; var secState = secUI.QueryInterface(Ci.nsISSLStatusProvider).SSLStatus;
if (secState) { if (secState) {
secState.QueryInterface(Ci.nsISSLStatus); secState.QueryInterface(Ci.nsISSLStatus);
if (secState.isExtendedValidation) {
if ((aState & wpl.STATE_LOADED_MIXED_ACTIVE_CONTENT) ||
(aState & wpl.STATE_LOADED_MIXED_DISPLAY_CONTENT))
level = "broken";
else if (level == "high")
level = "ev";
} else {
if (aState & wpl.STATE_LOADED_MIXED_ACTIVE_CONTENT)
level = "low";
else if (aState & wpl.STATE_LOADED_MIXED_DISPLAY_CONTENT)
level = "high";
}
if (level != "broken") {
var proto = secState.protocolVersion; var proto = secState.protocolVersion;
if (proto == Ci.nsISSLStatus.SSL_VERSION_3) { if (proto == Ci.nsISSLStatus.SSL_VERSION_3) {
level = "broken"; level = "broken";
@ -90,6 +82,7 @@ var padlock_PadLock =
} }
} }
} }
}
try { try {
var proto = gBrowser.contentWindow.location.protocol; var proto = gBrowser.contentWindow.location.protocol;