diff --git a/src/common/FrameManager.ts b/src/common/FrameManager.ts index 2f2e011d45e99..8ab336bc26673 100644 --- a/src/common/FrameManager.ts +++ b/src/common/FrameManager.ts @@ -16,10 +16,8 @@ import {Protocol} from 'devtools-protocol'; import {assert} from '../util/assert.js'; -import { - createDeferredPromise, - DeferredPromise, -} from '../util/DeferredPromise.js'; +import {createDebuggableDeferredPromise} from '../util/DebuggableDeferredPromise.js'; +import {DeferredPromise} from '../util/DeferredPromise.js'; import {isErrorLike} from '../util/ErrorLike.js'; import {CDPSession} from './Connection.js'; import {EventEmitter} from './EventEmitter.js'; @@ -150,9 +148,9 @@ export class FrameManager extends EventEmitter { if (!this.#framesPendingTargetInit.has(targetId)) { this.#framesPendingTargetInit.set( targetId, - createDeferredPromise({ - message: `Waiting for target frame ${targetId} failed`, - }) + createDebuggableDeferredPromise( + `Waiting for target frame ${targetId} failed` + ) ); } const result = await Promise.all([ @@ -318,9 +316,9 @@ export class FrameManager extends EventEmitter { if (!this.#framesPendingAttachment.has(frameId)) { this.#framesPendingAttachment.set( frameId, - createDeferredPromise({ - message: `Waiting for frame ${frameId} to attach failed`, - }) + createDebuggableDeferredPromise( + `Waiting for frame ${frameId} to attach failed` + ) ); } frame.then(() => { diff --git a/src/common/NetworkManager.ts b/src/common/NetworkManager.ts index 2d0a757af58df..da1a0d19f18b3 100644 --- a/src/common/NetworkManager.ts +++ b/src/common/NetworkManager.ts @@ -23,10 +23,8 @@ import {HTTPRequest} from './HTTPRequest.js'; import {HTTPResponse} from './HTTPResponse.js'; import {FetchRequestId, NetworkEventManager} from './NetworkEventManager.js'; import {debugError, isString} from './util.js'; -import { - createDeferredPromise, - DeferredPromise, -} from '../util/DeferredPromise.js'; +import {DeferredPromise} from '../util/DeferredPromise.js'; +import {createDebuggableDeferredPromise} from '../util/DebuggableDeferredPromise.js'; /** * @public @@ -144,9 +142,9 @@ export class NetworkManager extends EventEmitter { if (this.#deferredInitPromise) { return this.#deferredInitPromise; } - this.#deferredInitPromise = createDeferredPromise({ - message: 'NetworkManager initialization timed out', - }); + this.#deferredInitPromise = createDebuggableDeferredPromise( + 'NetworkManager initialization timed out' + ); const init = Promise.all([ this.#ignoreHTTPSErrors ? this.#client.send('Security.setIgnoreCertificateErrors', { diff --git a/src/types.ts b/src/types.ts index 42978312e78d3..00bed28c5a298 100644 --- a/src/types.ts +++ b/src/types.ts @@ -68,6 +68,7 @@ export * from './node/util.js'; export * from './puppeteer.js'; export * from './revisions.js'; export * from './util/assert.js'; +export * from './util/DebuggableDeferredPromise.js'; export * from './util/DeferredPromise.js'; export * from './util/ErrorLike.js'; export * from './util/getPackageDirectory.js'; diff --git a/src/util/DebuggableDeferredPromise.ts b/src/util/DebuggableDeferredPromise.ts new file mode 100644 index 0000000000000..6e9fd6a7392ba --- /dev/null +++ b/src/util/DebuggableDeferredPromise.ts @@ -0,0 +1,20 @@ +import {DEFERRED_PROMISE_DEBUG_TIMEOUT} from '../environment.js'; +import {DeferredPromise, createDeferredPromise} from './DeferredPromise.js'; + +/** + * Creates and returns a deferred promise using DEFERRED_PROMISE_DEBUG_TIMEOUT + * if it's specified or a normal deferred promise otherwise. + * + * @internal + */ +export function createDebuggableDeferredPromise( + message: string +): DeferredPromise { + if (DEFERRED_PROMISE_DEBUG_TIMEOUT > 0) { + return createDeferredPromise({ + message, + timeout: DEFERRED_PROMISE_DEBUG_TIMEOUT, + }); + } + return createDeferredPromise({message}); +} diff --git a/src/util/DeferredPromise.ts b/src/util/DeferredPromise.ts index e2350c07c2c6d..03272288bc821 100644 --- a/src/util/DeferredPromise.ts +++ b/src/util/DeferredPromise.ts @@ -1,5 +1,4 @@ import {TimeoutError} from '../common/Errors.js'; -import {DEFERRED_PROMISE_DEBUG_TIMEOUT} from '../environment.js'; /** * @internal @@ -11,14 +10,16 @@ export interface DeferredPromise extends Promise { reject: (_: Error) => void; } -interface DeferredPromiseOptions { +/** + * @internal + */ +export interface DeferredPromiseOptions { message?: string; timeout?: number; - isDebug?: boolean; } /** - * Creates an returns a promise along with the resolve/reject functions. + * Creates and returns a promise along with the resolve/reject functions. * * If the promise has not been resolved/rejected within the `timeout` period, * the promise gets rejected with a timeout error. @@ -29,9 +30,6 @@ export function createDeferredPromise({ message, timeout = 5000, }: DeferredPromiseOptions = {}): DeferredPromise { - if (DEFERRED_PROMISE_DEBUG_TIMEOUT > 0 && !timeout) { - timeout = DEFERRED_PROMISE_DEBUG_TIMEOUT; - } let isResolved = false; let isRejected = false; let resolver = (_: T): void => {}; @@ -40,12 +38,13 @@ export function createDeferredPromise({ resolver = resolve; rejector = reject; }); - const timeoutId = message - ? setTimeout(() => { - isRejected = true; - rejector(new TimeoutError(message)); - }, timeout) - : undefined; + const timeoutId = + timeout > 0 + ? setTimeout(() => { + isRejected = true; + rejector(new TimeoutError(message)); + }, timeout) + : undefined; return Object.assign(taskPromise, { resolved: () => { return isResolved;