mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
chore: allow aborting in-flight routes on context reuse (#15460)
This commit is contained in:
parent
be4f27d685
commit
5fd6ce4de0
@ -75,6 +75,7 @@ export abstract class BrowserContext extends SdkObject {
|
||||
readonly _tempDirs: string[] = [];
|
||||
private _settingStorageState = false;
|
||||
readonly initScripts: string[] = [];
|
||||
private _routesInFlight = new Set<network.Route>();
|
||||
|
||||
constructor(browser: Browser, options: channels.BrowserNewContextParams, browserContextId: string | undefined) {
|
||||
super(browser, 'browser-context');
|
||||
@ -458,6 +459,19 @@ export abstract class BrowserContext extends SdkObject {
|
||||
const recorder = this._harRecorders.get(harId || '')!;
|
||||
return recorder.export();
|
||||
}
|
||||
|
||||
addRouteInFlight(route: network.Route) {
|
||||
this._routesInFlight.add(route);
|
||||
}
|
||||
|
||||
removeRouteInFlight(route: network.Route) {
|
||||
this._routesInFlight.delete(route);
|
||||
}
|
||||
|
||||
async _cancelAllRoutesInFlight() {
|
||||
await Promise.all([...this._routesInFlight].map(r => r.abort())).catch(() => {});
|
||||
this._routesInFlight.clear();
|
||||
}
|
||||
}
|
||||
|
||||
export function assertBrowserContextIsNotOwned(context: BrowserContext) {
|
||||
|
||||
@ -232,6 +232,7 @@ export class Route extends SdkObject {
|
||||
super(request._frame || request._context , 'route');
|
||||
this._request = request;
|
||||
this._delegate = delegate;
|
||||
this._request._context.addRouteInFlight(this);
|
||||
}
|
||||
|
||||
request(): Request {
|
||||
@ -241,6 +242,7 @@ export class Route extends SdkObject {
|
||||
async abort(errorCode: string = 'failed') {
|
||||
this._startHandling();
|
||||
await this._delegate.abort(errorCode);
|
||||
this._endHandling();
|
||||
}
|
||||
|
||||
async redirectNavigationRequest(url: string) {
|
||||
@ -272,6 +274,7 @@ export class Route extends SdkObject {
|
||||
body,
|
||||
isBase64,
|
||||
});
|
||||
this._endHandling();
|
||||
}
|
||||
|
||||
// See https://github.com/microsoft/playwright/issues/12929
|
||||
@ -301,12 +304,17 @@ export class Route extends SdkObject {
|
||||
throw new Error('New URL must have same protocol as overridden URL');
|
||||
}
|
||||
await this._delegate.continue(this._request, overrides);
|
||||
this._endHandling();
|
||||
}
|
||||
|
||||
private _startHandling() {
|
||||
assert(!this._handled, 'Route is already handled!');
|
||||
this._handled = true;
|
||||
}
|
||||
|
||||
private _endHandling() {
|
||||
this._request._context.removeRouteInFlight(this);
|
||||
}
|
||||
}
|
||||
|
||||
export type RouteHandler = (route: Route, request: Request) => void;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user