refactor: move waitWithNetworkIdle (#11321)
This commit is contained in:
parent
b73dec0134
commit
1927fb561e
@ -16,7 +16,6 @@
|
||||
|
||||
import * as Bidi from 'chromium-bidi/lib/cjs/protocol/protocol.js';
|
||||
|
||||
import type {ObservableInput} from '../../third_party/rxjs/rxjs.js';
|
||||
import {
|
||||
type Observable,
|
||||
from,
|
||||
@ -37,19 +36,13 @@ import {
|
||||
} from '../api/Frame.js';
|
||||
import type {TimeoutSettings} from '../common/TimeoutSettings.js';
|
||||
import type {Awaitable} from '../common/types.js';
|
||||
import {
|
||||
NETWORK_IDLE_TIME,
|
||||
UTILITY_WORLD_NAME,
|
||||
setPageContent,
|
||||
timeout,
|
||||
} from '../common/util.js';
|
||||
import {UTILITY_WORLD_NAME, setPageContent, timeout} from '../common/util.js';
|
||||
import {Deferred} from '../util/Deferred.js';
|
||||
import {disposeSymbol} from '../util/disposable.js';
|
||||
|
||||
import type {BrowsingContext} from './BrowsingContext.js';
|
||||
import {ExposeableFunction} from './ExposedFunction.js';
|
||||
import type {BidiHTTPResponse} from './HTTPResponse.js';
|
||||
import type {BiDiNetworkIdle} from './lifecycle.js';
|
||||
import {
|
||||
getBiDiLifecycleEvent,
|
||||
getBiDiReadinessState,
|
||||
@ -141,7 +134,8 @@ export class BidiFrame extends Frame {
|
||||
const [readiness, networkIdle] = getBiDiReadinessState(waitUntil);
|
||||
|
||||
const response = await firstValueFrom(
|
||||
this._waitWithNetworkIdle(
|
||||
this.#page
|
||||
._waitWithNetworkIdle(
|
||||
this.#context.connection.send('browsingContext.navigate', {
|
||||
context: this.#context.id,
|
||||
url,
|
||||
@ -169,7 +163,8 @@ export class BidiFrame extends Frame {
|
||||
const [waitEvent, networkIdle] = getBiDiLifecycleEvent(waitUntil);
|
||||
|
||||
await firstValueFrom(
|
||||
this._waitWithNetworkIdle(
|
||||
this.#page
|
||||
._waitWithNetworkIdle(
|
||||
forkJoin([
|
||||
fromEvent(this.#context, waitEvent).pipe(first()),
|
||||
from(setPageContent(this, html)),
|
||||
@ -224,9 +219,9 @@ export class BidiFrame extends Frame {
|
||||
);
|
||||
|
||||
const response = await firstValueFrom(
|
||||
this._waitWithNetworkIdle(navigatedObservable, networkIdle).pipe(
|
||||
raceWith(timeout(ms), from(this.#abortDeferred.valueOrThrow()))
|
||||
)
|
||||
this.#page
|
||||
._waitWithNetworkIdle(navigatedObservable, networkIdle)
|
||||
.pipe(raceWith(timeout(ms), from(this.#abortDeferred.valueOrThrow())))
|
||||
);
|
||||
|
||||
return this.#page.getNavigationResponse(response?.result.navigation);
|
||||
@ -266,31 +261,4 @@ export class BidiFrame extends Frame {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
_waitWithNetworkIdle(
|
||||
observableInput: ObservableInput<{
|
||||
result: Bidi.BrowsingContext.NavigateResult;
|
||||
} | null>,
|
||||
networkIdle: BiDiNetworkIdle
|
||||
): Observable<{
|
||||
result: Bidi.BrowsingContext.NavigateResult;
|
||||
} | null> {
|
||||
const delay = networkIdle
|
||||
? this.#page._waitForNetworkIdle(
|
||||
this.#page._networkManager,
|
||||
NETWORK_IDLE_TIME,
|
||||
networkIdle === 'networkidle0' ? 0 : 2
|
||||
)
|
||||
: from(Promise.resolve());
|
||||
|
||||
return forkJoin([
|
||||
from(observableInput).pipe(first()),
|
||||
delay.pipe(first()),
|
||||
]).pipe(
|
||||
map(([response]) => {
|
||||
return response;
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,15 @@ import type {Readable} from 'stream';
|
||||
import type * as Bidi from 'chromium-bidi/lib/cjs/protocol/protocol.js';
|
||||
import type Protocol from 'devtools-protocol';
|
||||
|
||||
import {firstValueFrom, from, raceWith} from '../../third_party/rxjs/rxjs.js';
|
||||
import type {Observable, ObservableInput} from '../../third_party/rxjs/rxjs.js';
|
||||
import {
|
||||
first,
|
||||
firstValueFrom,
|
||||
forkJoin,
|
||||
from,
|
||||
map,
|
||||
raceWith,
|
||||
} from '../../third_party/rxjs/rxjs.js';
|
||||
import type {CDPSession} from '../api/CDPSession.js';
|
||||
import type {WaitForOptions} from '../api/Frame.js';
|
||||
import {
|
||||
@ -74,6 +82,7 @@ import type {BidiHTTPRequest} from './HTTPRequest.js';
|
||||
import type {BidiHTTPResponse} from './HTTPResponse.js';
|
||||
import {BidiKeyboard, BidiMouse, BidiTouchscreen} from './Input.js';
|
||||
import type {BidiJSHandle} from './JSHandle.js';
|
||||
import type {BiDiNetworkIdle} from './lifecycle.js';
|
||||
import {getBiDiReadinessState, rewriteNavigationError} from './lifecycle.js';
|
||||
import {BidiNetworkManager} from './NetworkManager.js';
|
||||
import {createBidiHandle} from './Realm.js';
|
||||
@ -491,8 +500,7 @@ export class BidiPage extends Page {
|
||||
const [readiness, networkIdle] = getBiDiReadinessState(waitUntil);
|
||||
|
||||
const response = await firstValueFrom(
|
||||
this.mainFrame()
|
||||
._waitWithNetworkIdle(
|
||||
this._waitWithNetworkIdle(
|
||||
this.#connection.send('browsingContext.reload', {
|
||||
context: this.mainFrame()._id,
|
||||
wait: readiness,
|
||||
@ -720,6 +728,33 @@ export class BidiPage extends Page {
|
||||
);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
_waitWithNetworkIdle(
|
||||
observableInput: ObservableInput<{
|
||||
result: Bidi.BrowsingContext.NavigateResult;
|
||||
} | null>,
|
||||
networkIdle: BiDiNetworkIdle
|
||||
): Observable<{
|
||||
result: Bidi.BrowsingContext.NavigateResult;
|
||||
} | null> {
|
||||
const delay = networkIdle
|
||||
? this._waitForNetworkIdle(
|
||||
this._networkManager,
|
||||
NETWORK_IDLE_TIME,
|
||||
networkIdle === 'networkidle0' ? 0 : 2
|
||||
)
|
||||
: from(Promise.resolve());
|
||||
|
||||
return forkJoin([
|
||||
from(observableInput).pipe(first()),
|
||||
delay.pipe(first()),
|
||||
]).pipe(
|
||||
map(([response]) => {
|
||||
return response;
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
override async createCDPSession(): Promise<CDPSession> {
|
||||
const {sessionId} = await this.mainFrame()
|
||||
.context()
|
||||
|
Loading…
Reference in New Issue
Block a user