@@ -2091,6 +2091,14 @@ class LoopbackPort {
20912091 * @param {PDFWorkerParameters } params - The worker initialization parameters.
20922092 */
20932093class PDFWorker {
2094+ #capability = Promise . withResolvers ( ) ;
2095+
2096+ #messageHandler = null ;
2097+
2098+ #port = null ;
2099+
2100+ #webWorker = null ;
2101+
20942102 static #fakeWorkerId = 0 ;
20952103
20962104 static #isWorkerDisabled = false ;
@@ -2158,34 +2166,38 @@ class PDFWorker {
21582166 this . destroyed = false ;
21592167 this . verbosity = verbosity ;
21602168
2161- this . _readyCapability = Promise . withResolvers ( ) ;
2162- this . _port = null ;
2163- this . _webWorker = null ;
2164- this . _messageHandler = null ;
2165-
21662169 if ( port ) {
21672170 if ( PDFWorker . #workerPorts. has ( port ) ) {
21682171 throw new Error ( "Cannot use more than one PDFWorker per port." ) ;
21692172 }
21702173 PDFWorker . #workerPorts. set ( port , this ) ;
2171- this . _initializeFromPort ( port ) ;
2172- return ;
2174+ this . #initializeFromPort( port ) ;
2175+ } else {
2176+ this . #initialize( ) ;
2177+ }
2178+
2179+ if ( typeof PDFJSDev === "undefined" || PDFJSDev . test ( "TESTING" ) ) {
2180+ // For testing purposes.
2181+ Object . defineProperty ( this , "_webWorker" , {
2182+ get ( ) {
2183+ return this . #webWorker;
2184+ } ,
2185+ } ) ;
21732186 }
2174- this . _initialize ( ) ;
21752187 }
21762188
21772189 /**
21782190 * Promise for worker initialization completion.
21792191 * @type {Promise<void> }
21802192 */
21812193 get promise ( ) {
2182- return this . _readyCapability . promise ;
2194+ return this . #capability . promise ;
21832195 }
21842196
21852197 #resolve( ) {
2186- this . _readyCapability . resolve ( ) ;
2198+ this . #capability . resolve ( ) ;
21872199 // Send global setting, e.g. verbosity level.
2188- this . _messageHandler . send ( "configure" , {
2200+ this . #messageHandler . send ( "configure" , {
21892201 verbosity : this . verbosity ,
21902202 } ) ;
21912203 }
@@ -2195,28 +2207,28 @@ class PDFWorker {
21952207 * @type {Worker }
21962208 */
21972209 get port ( ) {
2198- return this . _port ;
2210+ return this . #port ;
21992211 }
22002212
22012213 /**
22022214 * The current MessageHandler-instance.
22032215 * @type {MessageHandler }
22042216 */
22052217 get messageHandler ( ) {
2206- return this . _messageHandler ;
2218+ return this . #messageHandler ;
22072219 }
22082220
2209- _initializeFromPort ( port ) {
2210- this . _port = port ;
2211- this . _messageHandler = new MessageHandler ( "main" , "worker" , port ) ;
2212- this . _messageHandler . on ( "ready" , function ( ) {
2221+ #initializeFromPort ( port ) {
2222+ this . #port = port ;
2223+ this . #messageHandler = new MessageHandler ( "main" , "worker" , port ) ;
2224+ this . #messageHandler . on ( "ready" , ( ) => {
22132225 // Ignoring "ready" event -- MessageHandler should already be initialized
22142226 // and ready to accept messages.
22152227 } ) ;
22162228 this . #resolve( ) ;
22172229 }
22182230
2219- _initialize ( ) {
2231+ #initialize ( ) {
22202232 // If worker support isn't disabled explicit and the browser has worker
22212233 // support, create a new web worker and test if it/the browser fulfills
22222234 // all requirements to run parts of pdf.js in a web worker.
@@ -2226,7 +2238,7 @@ class PDFWorker {
22262238 PDFWorker . #isWorkerDisabled ||
22272239 PDFWorker . #mainThreadWorkerMessageHandler
22282240 ) {
2229- this . _setupFakeWorker ( ) ;
2241+ this . #setupFakeWorker ( ) ;
22302242 return ;
22312243 }
22322244 let { workerSrc } = PDFWorker ;
@@ -2251,19 +2263,19 @@ class PDFWorker {
22512263 messageHandler . destroy ( ) ;
22522264 worker . terminate ( ) ;
22532265 if ( this . destroyed ) {
2254- this . _readyCapability . reject ( new Error ( "Worker was destroyed" ) ) ;
2266+ this . #capability . reject ( new Error ( "Worker was destroyed" ) ) ;
22552267 } else {
22562268 // Fall back to fake worker if the termination is caused by an
22572269 // error (e.g. NetworkError / SecurityError).
2258- this . _setupFakeWorker ( ) ;
2270+ this . #setupFakeWorker ( ) ;
22592271 }
22602272 } ;
22612273
22622274 const ac = new AbortController ( ) ;
22632275 worker . addEventListener (
22642276 "error" ,
22652277 ( ) => {
2266- if ( ! this . _webWorker ) {
2278+ if ( ! this . #webWorker ) {
22672279 // Worker failed to initialize due to an error. Clean up and fall
22682280 // back to the fake worker.
22692281 terminateEarly ( ) ;
@@ -2278,9 +2290,9 @@ class PDFWorker {
22782290 terminateEarly ( ) ;
22792291 return ;
22802292 }
2281- this . _messageHandler = messageHandler ;
2282- this . _port = worker ;
2283- this . _webWorker = worker ;
2293+ this . #messageHandler = messageHandler ;
2294+ this . #port = worker ;
2295+ this . #webWorker = worker ;
22842296
22852297 this . #resolve( ) ;
22862298 } ) ;
@@ -2295,7 +2307,7 @@ class PDFWorker {
22952307 sendTest ( ) ;
22962308 } catch {
22972309 // We need fallback to a faked worker.
2298- this . _setupFakeWorker ( ) ;
2310+ this . #setupFakeWorker ( ) ;
22992311 }
23002312 } ) ;
23012313
@@ -2315,10 +2327,10 @@ class PDFWorker {
23152327 }
23162328 // Either workers are not supported or have thrown an exception.
23172329 // Thus, we fallback to a faked worker.
2318- this . _setupFakeWorker ( ) ;
2330+ this . #setupFakeWorker ( ) ;
23192331 }
23202332
2321- _setupFakeWorker ( ) {
2333+ #setupFakeWorker ( ) {
23222334 if ( ! PDFWorker . #isWorkerDisabled) {
23232335 warn ( "Setting up fake worker." ) ;
23242336 PDFWorker . #isWorkerDisabled = true ;
@@ -2327,11 +2339,11 @@ class PDFWorker {
23272339 PDFWorker . _setupFakeWorkerGlobal
23282340 . then ( WorkerMessageHandler => {
23292341 if ( this . destroyed ) {
2330- this . _readyCapability . reject ( new Error ( "Worker was destroyed" ) ) ;
2342+ this . #capability . reject ( new Error ( "Worker was destroyed" ) ) ;
23312343 return ;
23322344 }
23332345 const port = new LoopbackPort ( ) ;
2334- this . _port = port ;
2346+ this . #port = port ;
23352347
23362348 // All fake workers use the same port, making id unique.
23372349 const id = `fake${ PDFWorker . #fakeWorkerId++ } ` ;
@@ -2341,11 +2353,11 @@ class PDFWorker {
23412353 const workerHandler = new MessageHandler ( id + "_worker" , id , port ) ;
23422354 WorkerMessageHandler . setup ( workerHandler , port ) ;
23432355
2344- this . _messageHandler = new MessageHandler ( id , id + "_worker" , port ) ;
2356+ this . #messageHandler = new MessageHandler ( id , id + "_worker" , port ) ;
23452357 this . #resolve( ) ;
23462358 } )
23472359 . catch ( reason => {
2348- this . _readyCapability . reject (
2360+ this . #capability . reject (
23492361 new Error ( `Setting up fake worker failed: "${ reason . message } ".` )
23502362 ) ;
23512363 } ) ;
@@ -2358,14 +2370,14 @@ class PDFWorker {
23582370 this . destroyed = true ;
23592371
23602372 // We need to terminate only web worker created resource.
2361- this . _webWorker ?. terminate ( ) ;
2362- this . _webWorker = null ;
2373+ this . #webWorker ?. terminate ( ) ;
2374+ this . #webWorker = null ;
23632375
2364- PDFWorker . #workerPorts. delete ( this . _port ) ;
2365- this . _port = null ;
2376+ PDFWorker . #workerPorts. delete ( this . #port ) ;
2377+ this . #port = null ;
23662378
2367- this . _messageHandler ?. destroy ( ) ;
2368- this . _messageHandler = null ;
2379+ this . #messageHandler ?. destroy ( ) ;
2380+ this . #messageHandler = null ;
23692381 }
23702382
23712383 /**
0 commit comments