Skip to content

Commit 628e3f3

Browse files
englehardtvringar
authored andcommitted
Move dns_instrument from onCompleted to onHeadersReceived
1 parent d80aaa1 commit 628e3f3

File tree

3 files changed

+34
-19
lines changed

3 files changed

+34
-19
lines changed

Extension/src/background/dns-instrument.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { PendingResponse } from "../lib/pending-response";
22
import { DnsResolved } from "../schema";
33
import { allTypes } from "./http-instrument";
44
import RequestFilter = browser.webRequest.RequestFilter;
5+
import { WebRequestOnHeadersReceivedDetails } from "../types/browser-web-request-event-details";
56

67
export class DnsInstrument {
78
private readonly dataReceiver;
8-
private onCompleteListener;
9+
private onHeadersReceivedListener;
910
private pendingResponses: {
1011
[requestId: number]: PendingResponse;
1112
} = {};
@@ -28,25 +29,23 @@ export class DnsInstrument {
2829
/*
2930
* Attach handlers to event listeners
3031
*/
31-
this.onCompleteListener = (
32-
details: browser.webRequest._OnCompletedDetails,
33-
) => {
32+
this.onHeadersReceivedListener = (details: browser.webRequest._OnHeadersReceivedDetails) => {
3433
// Ignore requests made by extensions
3534
if (requestStemsFromExtension(details)) {
3635
return;
3736
}
3837
const pendingResponse = this.getPendingResponse(details.requestId);
39-
pendingResponse.resolveOnCompletedEventDetails(details);
38+
pendingResponse.resolveOnHeadersReceivedDetails(details);
4039

4140
this.onCompleteDnsHandler(details, crawlID);
4241
};
4342

44-
browser.webRequest.onCompleted.addListener(this.onCompleteListener, filter);
43+
browser.webRequest.onHeadersReceived.addListener(this.onHeadersReceivedListener, filter);
4544
}
4645

4746
public cleanup() {
48-
if (this.onCompleteListener) {
49-
browser.webRequest.onCompleted.removeListener(this.onCompleteListener);
47+
if (this.onHeadersReceivedListener) {
48+
browser.webRequest.onHeadersReceived.removeListener(this.onHeadersReceivedListener);
5049
}
5150
}
5251

@@ -71,7 +70,7 @@ export class DnsInstrument {
7170
}
7271

7372
private async onCompleteDnsHandler(
74-
details: browser.webRequest._OnCompletedDetails,
73+
details: WebRequestOnHeadersReceivedDetails,
7574
crawlID,
7675
) {
7776
// Create and populate DnsResolve object

Extension/src/lib/pending-response.ts

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,36 @@
11
import { ResponseBodyListener } from "./response-body-listener";
22

33
/**
4-
* Ties together the two separate events that together holds information about both response headers and body
4+
* Ties together three separate events that hold information about both response headers and body
55
*/
66
export class PendingResponse {
7-
public readonly onBeforeRequestEventDetails: Promise<browser.webRequest._OnBeforeRequestDetails>;
8-
public readonly onCompletedEventDetails: Promise<browser.webRequest._OnCompletedDetails>;
7+
public readonly onBeforeRequestEventDetails: Promise<
8+
browser.webRequest._OnBeforeRequestDetails
9+
>;
10+
public readonly onHeadersReceivedEventDetails: Promise<
11+
browser.webRequest._OnHeadersReceivedDetails
12+
>;
13+
public readonly onCompletedEventDetails: Promise<
14+
browser.webRequest._OnCompletedDetails
15+
>;
916
public responseBodyListener: ResponseBodyListener;
1017
public resolveOnBeforeRequestEventDetails: (
1118
details: browser.webRequest._OnBeforeRequestDetails,
1219
) => void;
20+
public resolveOnHeadersReceivedDetails: (
21+
details: browser.webRequest._OnHeadersReceivedDetails,
22+
) => void;
1323
public resolveOnCompletedEventDetails: (
1424
details: browser.webRequest._OnCompletedDetails,
1525
) => void;
1626
constructor() {
1727
this.onBeforeRequestEventDetails = new Promise((resolve) => {
1828
this.resolveOnBeforeRequestEventDetails = resolve;
1929
});
20-
this.onCompletedEventDetails = new Promise((resolve) => {
30+
this.onHeadersReceivedEventDetails = new Promise(resolve => {
31+
this.resolveOnHeadersReceivedDetails = resolve;
32+
});
33+
this.onCompletedEventDetails = new Promise(resolve => {
2134
this.resolveOnCompletedEventDetails = resolve;
2235
});
2336
}
@@ -29,6 +42,7 @@ export class PendingResponse {
2942
public resolved() {
3043
return Promise.all([
3144
this.onBeforeRequestEventDetails,
45+
this.onHeadersReceivedEventDetails,
3246
this.onCompletedEventDetails,
3347
]);
3448
}
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
/* eslint-disable no-underscore-dangle */
22

3-
/**
4-
* This file contains selected implicit interfaces copied from node_modules/@types/firefox-webext-browser/index.d.ts
5-
* Defined and exported here in order for our code to be able to reference them explicitly in helper functions
6-
* and class methods that accept arguments of these types.
7-
*/
8-
93
export interface FrameAncestor {
104
/** The URL that the document was loaded from. */
115
url: string;
@@ -18,3 +12,11 @@ export interface WebRequestOnBeforeSendHeadersEventDetails
1812
/** Contains information for each document in the frame hierarchy up to the top-level document. The first element in the array contains information about the immediate parent of the document being requested, and the last element contains information about the top-level document. If the load is actually for the top-level document, then this array is empty. */
1913
frameAncestors: FrameAncestor[];
2014
}
15+
16+
export interface WebRequestOnHeadersReceivedDetails extends browser.webRequest._OnHeadersReceivedDetails {
17+
/**
18+
* TODO: Does this actually exist?
19+
* The server IP address that the request was actually sent to. Note that it may be a literal IPv6 address.
20+
*/
21+
ip?: string;
22+
}

0 commit comments

Comments
 (0)