@@ -2,6 +2,7 @@ import pLimit from 'p-limit';
22import { nanoid } from 'nanoid' ;
33import ow from 'ow' ;
44import { TypedEmitter } from 'tiny-typed-emitter' ;
5+ import { addTimeoutToPromise , tryCancel } from '@apify/timeout' ;
56import { Fingerprint , FingerprintInjector } from 'fingerprint-injector' ;
67// eslint-disable-next-line @typescript-eslint/ban-ts-comment
78// @ts -expect-error no types for this package yet
@@ -12,7 +13,7 @@ import { BrowserPlugin } from './abstract-classes/browser-plugin';
1213import { BROWSER_POOL_EVENTS } from './events' ;
1314import { LaunchContext } from './launch-context' ;
1415import { log } from './logger' ;
15- import { addTimeoutToPromise , InferBrowserPluginArray , UnwrapPromise } from './utils' ;
16+ import { InferBrowserPluginArray , UnwrapPromise } from './utils' ;
1617import { createFingerprintPreLaunchHook , createPrePageCreateHook , createPostPageCreateHook } from './fingerprinting/hooks' ;
1718import { FingerprintGeneratorOptions } from './fingerprinting/types' ;
1819
@@ -394,6 +395,7 @@ export class BrowserPool<
394395 return this . limiter ( async ( ) => {
395396 let browserController = this . _pickBrowserWithFreeCapacity ( browserPlugin ) ;
396397 if ( ! browserController ) browserController = await this . _launchBrowser ( id , { browserPlugin } ) ;
398+ tryCancel ( ) ;
397399
398400 return this . _createPageForBrowser ( id , browserController , pageOptions , proxyUrl ) ;
399401 } ) ;
@@ -417,6 +419,7 @@ export class BrowserPool<
417419 }
418420
419421 const browserController = await this . _launchBrowser ( id , { launchOptions, browserPlugin } ) ;
422+ tryCancel ( ) ;
420423 return this . _createPageForBrowser ( id , browserController , pageOptions ) ;
421424 }
422425
@@ -501,6 +504,7 @@ export class BrowserPool<
501504 // It's not ideal though, we need to come up with a better API.
502505 // eslint-disable-next-line dot-notation -- accessing private property
503506 await browserController [ 'isActivePromise' ] ;
507+ tryCancel ( ) ;
504508
505509 const finalPageOptions = browserController . launchContext . useIncognitoPages ? pageOptions : undefined ;
506510
@@ -509,15 +513,17 @@ export class BrowserPool<
509513 }
510514
511515 await this . _executeHooks ( this . prePageCreateHooks , pageId , browserController , finalPageOptions ) ;
516+ tryCancel ( ) ;
512517
513518 let page : PageReturn ;
514519
515520 try {
516521 page = await addTimeoutToPromise (
517- browserController . newPage ( finalPageOptions ) ,
522+ ( ) => browserController . newPage ( finalPageOptions ) ,
518523 this . operationTimeoutMillis ,
519524 'browserController.newPage() timed out.' ,
520525 ) as PageReturn ;
526+ tryCancel ( ) ;
521527
522528 this . pages . set ( pageId , page ) ;
523529 this . pageIds . set ( page , pageId ) ;
@@ -536,6 +542,7 @@ export class BrowserPool<
536542 }
537543
538544 await this . _executeHooks ( this . postPageCreateHooks , page , browserController ) ;
545+ tryCancel ( ) ;
539546
540547 this . emit ( BROWSER_POOL_EVENTS . PAGE_CREATED , page ) ; // @TODO : CONSIDER renaming this event.
541548
@@ -581,12 +588,9 @@ export class BrowserPool<
581588 */
582589 async closeAllBrowsers ( ) : Promise < void > {
583590 const controllers = this . _getAllBrowserControllers ( ) ;
584-
585- const promises : Promise < void > [ ] = [ ] ;
586-
587- controllers . forEach ( ( controller ) => {
588- promises . push ( controller . close ( ) ) ;
589- } ) ;
591+ const promises = [ ...controllers ]
592+ . filter ( ( controller ) => controller . isActive )
593+ . map ( ( controller ) => controller . close ( ) ) ;
590594
591595 await Promise . all ( promises ) ;
592596 }
@@ -632,7 +636,9 @@ export class BrowserPool<
632636 // If the hooks or the launch fails, we need to delete the controller,
633637 // because otherwise it would be stuck in limbo without a browser.
634638 await this . _executeHooks ( this . preLaunchHooks , pageId , launchContext ) ;
639+ tryCancel ( ) ;
635640 const browser = await browserPlugin . launch ( launchContext ) ;
641+ tryCancel ( ) ;
636642 browserController . assignBrowser ( browser , launchContext ) ;
637643 } catch ( err ) {
638644 this . activeBrowserControllers . delete ( browserController ) ;
@@ -656,6 +662,7 @@ export class BrowserPool<
656662 throw err ;
657663 }
658664
665+ tryCancel ( ) ;
659666 browserController . activate ( ) ;
660667 this . emit ( BROWSER_POOL_EVENTS . BROWSER_LAUNCHED , browserController ) ;
661668
0 commit comments