Skip to content

Commit 5488b34

Browse files
committed
fix(core): block resources not working
1 parent cb49d1e commit 5488b34

File tree

5 files changed

+27
-14
lines changed

5 files changed

+27
-14
lines changed

core/lib/AwaitedEventListener.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,14 @@ export default class AwaitedEventListener {
1919
session.on('closing', () => this.triggerListenersWithType('close'));
2020
}
2121

22+
public close() {
23+
for (const entry of this.listenersById.values()) {
24+
if (entry.type !== 'close') {
25+
this.remove(entry.id);
26+
}
27+
}
28+
}
29+
2230
public listen(
2331
sessionMeta: ISessionMeta,
2432
jsPath: IJsPath | null,
@@ -59,11 +67,13 @@ export default class AwaitedEventListener {
5967

6068
const { type, meta, listenFn, jsPath } = listener;
6169
const tab = Session.getTab(meta);
62-
if (type === 'resource') {
63-
tab.off('resource', listenFn);
64-
}
65-
if (isWebsocketListener(listener)) {
66-
tab.sessionState.stopWebsocketMessages(jsPath[1] as string, listenFn);
70+
if (tab) {
71+
if (type === 'resource') {
72+
tab.off('resource', listenFn);
73+
}
74+
if (isWebsocketListener(listener)) {
75+
tab.sessionState.stopWebsocketMessages(jsPath[1] as string, listenFn);
76+
}
6777
}
6878

6979
for (const entry of this.listenersById.values()) {

core/lib/Session.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ export default class Session extends TypedEventEmitter<{
215215
sessionId: this.id,
216216
});
217217

218+
this.awaitedEventListener.close();
218219
await this.mitmRequestSession.close();
219220
await Promise.all(Object.values(this.tabs).map(x => x.close()));
220221
try {
@@ -289,7 +290,9 @@ export default class Session extends TypedEventEmitter<{
289290
}
290291

291292
const resource = this.sessionState.captureResource(tab?.id ?? tabId, event, true);
292-
tab?.emit('resource', resource);
293+
if (!event.didBlockResource) {
294+
tab?.emit('resource', resource);
295+
}
293296
tab?.checkForResolvedNavigation(event.browserRequestId, resource);
294297
}
295298

full-client/test/basic.test.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,10 @@ describe('basic Full Client tests', () => {
5151
await agent.activeTab.on('resource', event => resources.push(event));
5252
await agent.goto(`${koaServer.baseUrl}/block`);
5353
await agent.waitForPaintingStable();
54-
expect(resources).toHaveLength(3);
55-
for (const resource of resources) {
56-
const status = await resource.response.statusCode;
57-
if (resource.type === 'Document') expect(status).toBe(200);
58-
else expect(status).toBe(404);
59-
}
54+
await new Promise(setImmediate);
55+
expect(resources).toHaveLength(1);
56+
expect(await resources[0].response.statusCode).toBe(200);
57+
expect(resources[0].type).toBe('Document');
6058
});
6159

6260
it('should get unreachable proxy errors in the client', async () => {

mitm/handlers/BaseHttpHandler.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,21 @@ export default abstract class BaseHttpHandler {
4141

4242
if (session.isClosing) return context.setState(ResourceState.SessionClosed);
4343

44+
// need to determine resource type before blocking
45+
await HeadersHandler.determineResourceType(context);
46+
4447
if (BlockHandler.shouldBlockRequest(context)) {
4548
context.setState(ResourceState.Blocked);
4649
log.info(`Http.RequestBlocked`, {
4750
sessionId: session.sessionId,
4851
url: context.url.href,
4952
});
50-
await HeadersHandler.determineResourceType(context);
5153
await context.browserHasRequested;
5254
session.emit('response', MitmRequestContext.toEmittedResource(this.context));
5355
// already wrote reply
5456
return;
5557
}
5658

57-
await HeadersHandler.determineResourceType(context);
5859
await CookieHandler.setProxyToServerCookies(context);
5960

6061
// do one more check on the session before doing a connect

mitm/handlers/HeadersHandler.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ export default class HeadersHandler {
179179
private static secFetchDestToResourceType(secFetchDest: string): ResourceType {
180180
switch (secFetchDest) {
181181
case 'document':
182+
case 'iframe':
182183
case 'nested-document': // guess
183184
return 'Document';
184185
case 'style':

0 commit comments

Comments
 (0)