@@ -38,14 +38,15 @@ import {
3838 PrintAnnotationStorage ,
3939 SerializableEmpty ,
4040} from "./annotation_storage.js" ;
41- import { FontFaceObject , FontLoader } from "./font_loader.js" ;
4241import {
42+ deprecated ,
4343 isDataScheme ,
4444 isValidFetchUrl ,
4545 PageViewport ,
4646 RenderingCancelledException ,
4747 StatTimer ,
4848} from "./display_utils.js" ;
49+ import { FontFaceObject , FontLoader } from "./font_loader.js" ;
4950import { MessageHandler , wrapReason } from "../shared/message_handler.js" ;
5051import {
5152 NodeCanvasFactory ,
@@ -383,15 +384,12 @@ function getDocument(src = {}) {
383384 } ;
384385
385386 if ( ! worker ) {
386- const workerParams = {
387- verbosity,
388- port : GlobalWorkerOptions . workerPort ,
389- } ;
390387 // Worker was not provided -- creating and owning our own. If message port
391388 // is specified in global worker options, using it.
392- worker = workerParams . port
393- ? PDFWorker . fromPort ( workerParams )
394- : new PDFWorker ( workerParams ) ;
389+ worker = PDFWorker . create ( {
390+ verbosity,
391+ port : GlobalWorkerOptions . workerPort ,
392+ } ) ;
395393 task . _worker = worker ;
396394 }
397395
@@ -2093,6 +2091,14 @@ class LoopbackPort {
20932091 * @param {PDFWorkerParameters } params - The worker initialization parameters.
20942092 */
20952093class PDFWorker {
2094+ #capability = Promise . withResolvers ( ) ;
2095+
2096+ #messageHandler = null ;
2097+
2098+ #port = null ;
2099+
2100+ #webWorker = null ;
2101+
20962102 static #fakeWorkerId = 0 ;
20972103
20982104 static #isWorkerDisabled = false ;
@@ -2131,6 +2137,16 @@ class PDFWorker {
21312137 new Blob ( [ wrapper ] , { type : "text/javascript" } )
21322138 ) ;
21332139 } ;
2140+
2141+ this . fromPort = params => {
2142+ deprecated (
2143+ "`PDFWorker.fromPort` - please use `PDFWorker.create` instead."
2144+ ) ;
2145+ if ( ! params ?. port ) {
2146+ throw new Error ( "PDFWorker.fromPort - invalid method signature." ) ;
2147+ }
2148+ return this . create ( params ) ;
2149+ } ;
21342150 }
21352151
21362152 if ( typeof PDFJSDev === "undefined" || PDFJSDev . test ( "TESTING" ) ) {
@@ -2150,34 +2166,38 @@ class PDFWorker {
21502166 this . destroyed = false ;
21512167 this . verbosity = verbosity ;
21522168
2153- this . _readyCapability = Promise . withResolvers ( ) ;
2154- this . _port = null ;
2155- this . _webWorker = null ;
2156- this . _messageHandler = null ;
2157-
21582169 if ( port ) {
21592170 if ( PDFWorker . #workerPorts. has ( port ) ) {
21602171 throw new Error ( "Cannot use more than one PDFWorker per port." ) ;
21612172 }
21622173 PDFWorker . #workerPorts. set ( port , this ) ;
2163- this . _initializeFromPort ( port ) ;
2164- 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+ } ) ;
21652186 }
2166- this . _initialize ( ) ;
21672187 }
21682188
21692189 /**
21702190 * Promise for worker initialization completion.
21712191 * @type {Promise<void> }
21722192 */
21732193 get promise ( ) {
2174- return this . _readyCapability . promise ;
2194+ return this . #capability . promise ;
21752195 }
21762196
21772197 #resolve( ) {
2178- this . _readyCapability . resolve ( ) ;
2198+ this . #capability . resolve ( ) ;
21792199 // Send global setting, e.g. verbosity level.
2180- this . _messageHandler . send ( "configure" , {
2200+ this . #messageHandler . send ( "configure" , {
21812201 verbosity : this . verbosity ,
21822202 } ) ;
21832203 }
@@ -2187,28 +2207,28 @@ class PDFWorker {
21872207 * @type {Worker }
21882208 */
21892209 get port ( ) {
2190- return this . _port ;
2210+ return this . #port ;
21912211 }
21922212
21932213 /**
21942214 * The current MessageHandler-instance.
21952215 * @type {MessageHandler }
21962216 */
21972217 get messageHandler ( ) {
2198- return this . _messageHandler ;
2218+ return this . #messageHandler ;
21992219 }
22002220
2201- _initializeFromPort ( port ) {
2202- this . _port = port ;
2203- this . _messageHandler = new MessageHandler ( "main" , "worker" , port ) ;
2204- 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" , ( ) => {
22052225 // Ignoring "ready" event -- MessageHandler should already be initialized
22062226 // and ready to accept messages.
22072227 } ) ;
22082228 this . #resolve( ) ;
22092229 }
22102230
2211- _initialize ( ) {
2231+ #initialize ( ) {
22122232 // If worker support isn't disabled explicit and the browser has worker
22132233 // support, create a new web worker and test if it/the browser fulfills
22142234 // all requirements to run parts of pdf.js in a web worker.
@@ -2218,7 +2238,7 @@ class PDFWorker {
22182238 PDFWorker . #isWorkerDisabled ||
22192239 PDFWorker . #mainThreadWorkerMessageHandler
22202240 ) {
2221- this . _setupFakeWorker ( ) ;
2241+ this . #setupFakeWorker ( ) ;
22222242 return ;
22232243 }
22242244 let { workerSrc } = PDFWorker ;
@@ -2243,19 +2263,19 @@ class PDFWorker {
22432263 messageHandler . destroy ( ) ;
22442264 worker . terminate ( ) ;
22452265 if ( this . destroyed ) {
2246- this . _readyCapability . reject ( new Error ( "Worker was destroyed" ) ) ;
2266+ this . #capability . reject ( new Error ( "Worker was destroyed" ) ) ;
22472267 } else {
22482268 // Fall back to fake worker if the termination is caused by an
22492269 // error (e.g. NetworkError / SecurityError).
2250- this . _setupFakeWorker ( ) ;
2270+ this . #setupFakeWorker ( ) ;
22512271 }
22522272 } ;
22532273
22542274 const ac = new AbortController ( ) ;
22552275 worker . addEventListener (
22562276 "error" ,
22572277 ( ) => {
2258- if ( ! this . _webWorker ) {
2278+ if ( ! this . #webWorker ) {
22592279 // Worker failed to initialize due to an error. Clean up and fall
22602280 // back to the fake worker.
22612281 terminateEarly ( ) ;
@@ -2270,9 +2290,9 @@ class PDFWorker {
22702290 terminateEarly ( ) ;
22712291 return ;
22722292 }
2273- this . _messageHandler = messageHandler ;
2274- this . _port = worker ;
2275- this . _webWorker = worker ;
2293+ this . #messageHandler = messageHandler ;
2294+ this . #port = worker ;
2295+ this . #webWorker = worker ;
22762296
22772297 this . #resolve( ) ;
22782298 } ) ;
@@ -2287,7 +2307,7 @@ class PDFWorker {
22872307 sendTest ( ) ;
22882308 } catch {
22892309 // We need fallback to a faked worker.
2290- this . _setupFakeWorker ( ) ;
2310+ this . #setupFakeWorker ( ) ;
22912311 }
22922312 } ) ;
22932313
@@ -2307,10 +2327,10 @@ class PDFWorker {
23072327 }
23082328 // Either workers are not supported or have thrown an exception.
23092329 // Thus, we fallback to a faked worker.
2310- this . _setupFakeWorker ( ) ;
2330+ this . #setupFakeWorker ( ) ;
23112331 }
23122332
2313- _setupFakeWorker ( ) {
2333+ #setupFakeWorker ( ) {
23142334 if ( ! PDFWorker . #isWorkerDisabled) {
23152335 warn ( "Setting up fake worker." ) ;
23162336 PDFWorker . #isWorkerDisabled = true ;
@@ -2319,11 +2339,11 @@ class PDFWorker {
23192339 PDFWorker . _setupFakeWorkerGlobal
23202340 . then ( WorkerMessageHandler => {
23212341 if ( this . destroyed ) {
2322- this . _readyCapability . reject ( new Error ( "Worker was destroyed" ) ) ;
2342+ this . #capability . reject ( new Error ( "Worker was destroyed" ) ) ;
23232343 return ;
23242344 }
23252345 const port = new LoopbackPort ( ) ;
2326- this . _port = port ;
2346+ this . #port = port ;
23272347
23282348 // All fake workers use the same port, making id unique.
23292349 const id = `fake${ PDFWorker . #fakeWorkerId++ } ` ;
@@ -2333,11 +2353,11 @@ class PDFWorker {
23332353 const workerHandler = new MessageHandler ( id + "_worker" , id , port ) ;
23342354 WorkerMessageHandler . setup ( workerHandler , port ) ;
23352355
2336- this . _messageHandler = new MessageHandler ( id , id + "_worker" , port ) ;
2356+ this . #messageHandler = new MessageHandler ( id , id + "_worker" , port ) ;
23372357 this . #resolve( ) ;
23382358 } )
23392359 . catch ( reason => {
2340- this . _readyCapability . reject (
2360+ this . #capability . reject (
23412361 new Error ( `Setting up fake worker failed: "${ reason . message } ".` )
23422362 ) ;
23432363 } ) ;
@@ -2350,29 +2370,26 @@ class PDFWorker {
23502370 this . destroyed = true ;
23512371
23522372 // We need to terminate only web worker created resource.
2353- this . _webWorker ?. terminate ( ) ;
2354- this . _webWorker = null ;
2373+ this . #webWorker ?. terminate ( ) ;
2374+ this . #webWorker = null ;
23552375
2356- PDFWorker . #workerPorts. delete ( this . _port ) ;
2357- this . _port = null ;
2376+ PDFWorker . #workerPorts. delete ( this . #port ) ;
2377+ this . #port = null ;
23582378
2359- this . _messageHandler ?. destroy ( ) ;
2360- this . _messageHandler = null ;
2379+ this . #messageHandler ?. destroy ( ) ;
2380+ this . #messageHandler = null ;
23612381 }
23622382
23632383 /**
23642384 * @param {PDFWorkerParameters } params - The worker initialization parameters.
23652385 * @returns {PDFWorker }
23662386 */
2367- static fromPort ( params ) {
2368- if ( ! params ?. port ) {
2369- throw new Error ( "PDFWorker.fromPort - invalid method signature." ) ;
2370- }
2371- const cachedPort = this . #workerPorts. get ( params . port ) ;
2387+ static create ( params ) {
2388+ const cachedPort = this . #workerPorts. get ( params ?. port ) ;
23722389 if ( cachedPort ) {
23732390 if ( cachedPort . _pendingDestroy ) {
23742391 throw new Error (
2375- "PDFWorker.fromPort - the worker is being destroyed.\n" +
2392+ "PDFWorker.create - the worker is being destroyed.\n" +
23762393 "Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."
23772394 ) ;
23782395 }
0 commit comments