gecko-dev/browser/actors/NetErrorChild.jsm
Martin Thomson 222f4654e3 Bug 1745678 - Remove TLS 1.0/1.1 override UX, r=Gijs,mkaply,fluent-reviewers
I've erred on the side of removing code here.  I think that I got most of it,
but there was quite a bit of accrued code.

Thanks to Gijs for fluent fixups (and code cleanup).  This retains some notice
of the failed version.

Bug 1586846, Bug 1579285, Bug 1586846, and Bug 1617275 all added code here.

Differential Revision: https://phabricator.services.mozilla.com/D133591
2021-12-28 23:39:43 +00:00

114 lines
3.2 KiB
JavaScript

/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
var EXPORTED_SYMBOLS = ["NetErrorChild"];
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
const { RemotePageChild } = ChromeUtils.import(
"resource://gre/actors/RemotePageChild.jsm"
);
XPCOMUtils.defineLazyServiceGetter(
this,
"gSerializationHelper",
"@mozilla.org/network/serialization-helper;1",
"nsISerializationHelper"
);
class NetErrorChild extends RemotePageChild {
actorCreated() {
super.actorCreated();
// If you add a new function, remember to add it to RemotePageAccessManager.jsm
// to allow content-privileged about:neterror or about:certerror to use it.
const exportableFunctions = [
"RPMGetAppBuildID",
"RPMGetInnerMostURI",
"RPMAddToHistogram",
"RPMRecordTelemetryEvent",
"RPMGetHttpResponseHeader",
];
this.exportFunctions(exportableFunctions);
}
getSerializedSecurityInfo(docShell) {
let securityInfo =
docShell.failedChannel && docShell.failedChannel.securityInfo;
if (!securityInfo) {
return "";
}
securityInfo
.QueryInterface(Ci.nsITransportSecurityInfo)
.QueryInterface(Ci.nsISerializable);
return gSerializationHelper.serializeToString(securityInfo);
}
handleEvent(aEvent) {
// Documents have a null ownerDocument.
let doc = aEvent.originalTarget.ownerDocument || aEvent.originalTarget;
switch (aEvent.type) {
case "click":
let elem = aEvent.originalTarget;
if (elem.id == "viewCertificate") {
// Call through the superclass to avoid the security check.
this.sendAsyncMessage("Browser:CertExceptionError", {
location: doc.location.href,
elementId: elem.id,
securityInfoAsString: this.getSerializedSecurityInfo(
doc.defaultView.docShell
),
});
}
break;
}
}
RPMGetInnerMostURI(uriString) {
let uri = Services.io.newURI(uriString);
if (uri instanceof Ci.nsINestedURI) {
uri = uri.QueryInterface(Ci.nsINestedURI).innermostURI;
}
return uri.spec;
}
RPMGetAppBuildID() {
return Services.appinfo.appBuildID;
}
RPMAddToHistogram(histID, bin) {
Services.telemetry.getHistogramById(histID).add(bin);
}
RPMRecordTelemetryEvent(category, event, object, value, extra) {
Services.telemetry.recordEvent(category, event, object, value, extra);
}
// Get the header from the http response of the failed channel. This function
// is used in the 'about:neterror' page.
RPMGetHttpResponseHeader(responseHeader) {
let channel = this.contentWindow.docShell.failedChannel;
if (!channel) {
return "";
}
let httpChannel = channel.QueryInterface(Ci.nsIHttpChannel);
if (!httpChannel) {
return "";
}
try {
return httpChannel.getResponseHeader(responseHeader);
} catch (e) {}
return "";
}
}