feat(Network): introduce response.securityDetails() method (#1880)

This patch:
- introduces `SecurityDetails` class that exposes a set of fields that describe properties of secure connection
- introduces method `response.securityDetails()` that returns an instance of `SecurityDetails` object.
This commit is contained in:
Tomáš Trnka
2018-02-13 20:26:18 +01:00
committed by Andrey Lushnikov
parent 700244a29a
commit 856c431914
3 changed files with 103 additions and 2 deletions

View File

@@ -253,7 +253,7 @@ class NetworkManager extends EventEmitter {
if (!request)
return;
const response = new Response(this._client, request, event.response.status, event.response.headers,
event.response.fromDiskCache, event.response.fromServiceWorker);
event.response.fromDiskCache, event.response.fromServiceWorker, event.response.securityDetails);
request._response = response;
this.emit(NetworkManager.Events.Response, response);
}
@@ -498,10 +498,11 @@ class Response {
* @param {!Request} request
* @param {number} status
* @param {!Object} headers
* @param {!Object} securityDetails
* @param {boolean} fromDiskCache
* @param {boolean} fromServiceWorker
*/
constructor(client, request, status, headers, fromDiskCache, fromServiceWorker) {
constructor(client, request, status, headers, fromDiskCache, fromServiceWorker, securityDetails = null) {
this._client = client;
this._request = request;
this._contentPromise = null;
@@ -513,6 +514,15 @@ class Response {
this._headers = {};
for (const key of Object.keys(headers))
this._headers[key.toLowerCase()] = headers[key];
this._securityDetails = {};
if (securityDetails) {
this._securityDetails = new SecurityDetails(
securityDetails['subjectName'],
securityDetails['issuer'],
securityDetails['validFrom'],
securityDetails['validTo'],
securityDetails['protocol']);
}
}
/**
@@ -543,6 +553,13 @@ class Response {
return this._headers;
}
/**
* @return {!SecurityDetails|Object}
*/
securityDetails() {
return this._securityDetails;
}
/**
* @return {!Promise<!Buffer>}
*/
@@ -631,6 +648,59 @@ function generateRequestHash(request) {
return JSON.stringify(hash);
}
class SecurityDetails {
/**
* @param {string} subjectName
* @param {string} issuer
* @param {number} validFrom
* @param {number} validTo
* @param {string} protocol
*/
constructor(subjectName, issuer, validFrom, validTo, protocol) {
this._subjectName = subjectName;
this._issuer = issuer;
this._validFrom = validFrom;
this._validTo = validTo;
this._protocol = protocol;
}
/**
* @return {string}
*/
subjectName() {
return this._subjectName;
}
/**
* @return {string}
*/
issuer() {
return this._issuer;
}
/**
* @return {number}
*/
validFrom() {
return this._validFrom;
}
/**
* @return {number}
*/
validTo() {
return this._validTo;
}
/**
* @return {string}
*/
protocol() {
return this._protocol;
}
}
NetworkManager.Events = {
Request: 'request',
Response: 'response',