@@ -38,14 +38,15 @@ import {
38
38
PrintAnnotationStorage ,
39
39
SerializableEmpty ,
40
40
} from "./annotation_storage.js" ;
41
- import { FontFaceObject , FontLoader } from "./font_loader.js" ;
42
41
import {
42
+ deprecated ,
43
43
isDataScheme ,
44
44
isValidFetchUrl ,
45
45
PageViewport ,
46
46
RenderingCancelledException ,
47
47
StatTimer ,
48
48
} from "./display_utils.js" ;
49
+ import { FontFaceObject , FontLoader } from "./font_loader.js" ;
49
50
import { MessageHandler , wrapReason } from "../shared/message_handler.js" ;
50
51
import {
51
52
NodeCanvasFactory ,
@@ -383,15 +384,12 @@ function getDocument(src = {}) {
383
384
} ;
384
385
385
386
if ( ! worker ) {
386
- const workerParams = {
387
- verbosity,
388
- port : GlobalWorkerOptions . workerPort ,
389
- } ;
390
387
// Worker was not provided -- creating and owning our own. If message port
391
388
// 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
+ } ) ;
395
393
task . _worker = worker ;
396
394
}
397
395
@@ -2093,6 +2091,14 @@ class LoopbackPort {
2093
2091
* @param {PDFWorkerParameters } params - The worker initialization parameters.
2094
2092
*/
2095
2093
class PDFWorker {
2094
+ #capability = Promise . withResolvers ( ) ;
2095
+
2096
+ #messageHandler = null ;
2097
+
2098
+ #port = null ;
2099
+
2100
+ #webWorker = null ;
2101
+
2096
2102
static #fakeWorkerId = 0 ;
2097
2103
2098
2104
static #isWorkerDisabled = false ;
@@ -2131,6 +2137,16 @@ class PDFWorker {
2131
2137
new Blob ( [ wrapper ] , { type : "text/javascript" } )
2132
2138
) ;
2133
2139
} ;
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
+ } ;
2134
2150
}
2135
2151
2136
2152
if ( typeof PDFJSDev === "undefined" || PDFJSDev . test ( "TESTING" ) ) {
@@ -2150,34 +2166,38 @@ class PDFWorker {
2150
2166
this . destroyed = false ;
2151
2167
this . verbosity = verbosity ;
2152
2168
2153
- this . _readyCapability = Promise . withResolvers ( ) ;
2154
- this . _port = null ;
2155
- this . _webWorker = null ;
2156
- this . _messageHandler = null ;
2157
-
2158
2169
if ( port ) {
2159
2170
if ( PDFWorker . #workerPorts. has ( port ) ) {
2160
2171
throw new Error ( "Cannot use more than one PDFWorker per port." ) ;
2161
2172
}
2162
2173
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
+ } ) ;
2165
2186
}
2166
- this . _initialize ( ) ;
2167
2187
}
2168
2188
2169
2189
/**
2170
2190
* Promise for worker initialization completion.
2171
2191
* @type {Promise<void> }
2172
2192
*/
2173
2193
get promise ( ) {
2174
- return this . _readyCapability . promise ;
2194
+ return this . #capability . promise ;
2175
2195
}
2176
2196
2177
2197
#resolve( ) {
2178
- this . _readyCapability . resolve ( ) ;
2198
+ this . #capability . resolve ( ) ;
2179
2199
// Send global setting, e.g. verbosity level.
2180
- this . _messageHandler . send ( "configure" , {
2200
+ this . #messageHandler . send ( "configure" , {
2181
2201
verbosity : this . verbosity ,
2182
2202
} ) ;
2183
2203
}
@@ -2187,28 +2207,28 @@ class PDFWorker {
2187
2207
* @type {Worker }
2188
2208
*/
2189
2209
get port ( ) {
2190
- return this . _port ;
2210
+ return this . #port ;
2191
2211
}
2192
2212
2193
2213
/**
2194
2214
* The current MessageHandler-instance.
2195
2215
* @type {MessageHandler }
2196
2216
*/
2197
2217
get messageHandler ( ) {
2198
- return this . _messageHandler ;
2218
+ return this . #messageHandler ;
2199
2219
}
2200
2220
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" , ( ) => {
2205
2225
// Ignoring "ready" event -- MessageHandler should already be initialized
2206
2226
// and ready to accept messages.
2207
2227
} ) ;
2208
2228
this . #resolve( ) ;
2209
2229
}
2210
2230
2211
- _initialize ( ) {
2231
+ #initialize ( ) {
2212
2232
// If worker support isn't disabled explicit and the browser has worker
2213
2233
// support, create a new web worker and test if it/the browser fulfills
2214
2234
// all requirements to run parts of pdf.js in a web worker.
@@ -2218,7 +2238,7 @@ class PDFWorker {
2218
2238
PDFWorker . #isWorkerDisabled ||
2219
2239
PDFWorker . #mainThreadWorkerMessageHandler
2220
2240
) {
2221
- this . _setupFakeWorker ( ) ;
2241
+ this . #setupFakeWorker ( ) ;
2222
2242
return ;
2223
2243
}
2224
2244
let { workerSrc } = PDFWorker ;
@@ -2243,19 +2263,19 @@ class PDFWorker {
2243
2263
messageHandler . destroy ( ) ;
2244
2264
worker . terminate ( ) ;
2245
2265
if ( this . destroyed ) {
2246
- this . _readyCapability . reject ( new Error ( "Worker was destroyed" ) ) ;
2266
+ this . #capability . reject ( new Error ( "Worker was destroyed" ) ) ;
2247
2267
} else {
2248
2268
// Fall back to fake worker if the termination is caused by an
2249
2269
// error (e.g. NetworkError / SecurityError).
2250
- this . _setupFakeWorker ( ) ;
2270
+ this . #setupFakeWorker ( ) ;
2251
2271
}
2252
2272
} ;
2253
2273
2254
2274
const ac = new AbortController ( ) ;
2255
2275
worker . addEventListener (
2256
2276
"error" ,
2257
2277
( ) => {
2258
- if ( ! this . _webWorker ) {
2278
+ if ( ! this . #webWorker ) {
2259
2279
// Worker failed to initialize due to an error. Clean up and fall
2260
2280
// back to the fake worker.
2261
2281
terminateEarly ( ) ;
@@ -2270,9 +2290,9 @@ class PDFWorker {
2270
2290
terminateEarly ( ) ;
2271
2291
return ;
2272
2292
}
2273
- this . _messageHandler = messageHandler ;
2274
- this . _port = worker ;
2275
- this . _webWorker = worker ;
2293
+ this . #messageHandler = messageHandler ;
2294
+ this . #port = worker ;
2295
+ this . #webWorker = worker ;
2276
2296
2277
2297
this . #resolve( ) ;
2278
2298
} ) ;
@@ -2287,7 +2307,7 @@ class PDFWorker {
2287
2307
sendTest ( ) ;
2288
2308
} catch {
2289
2309
// We need fallback to a faked worker.
2290
- this . _setupFakeWorker ( ) ;
2310
+ this . #setupFakeWorker ( ) ;
2291
2311
}
2292
2312
} ) ;
2293
2313
@@ -2307,10 +2327,10 @@ class PDFWorker {
2307
2327
}
2308
2328
// Either workers are not supported or have thrown an exception.
2309
2329
// Thus, we fallback to a faked worker.
2310
- this . _setupFakeWorker ( ) ;
2330
+ this . #setupFakeWorker ( ) ;
2311
2331
}
2312
2332
2313
- _setupFakeWorker ( ) {
2333
+ #setupFakeWorker ( ) {
2314
2334
if ( ! PDFWorker . #isWorkerDisabled) {
2315
2335
warn ( "Setting up fake worker." ) ;
2316
2336
PDFWorker . #isWorkerDisabled = true ;
@@ -2319,11 +2339,11 @@ class PDFWorker {
2319
2339
PDFWorker . _setupFakeWorkerGlobal
2320
2340
. then ( WorkerMessageHandler => {
2321
2341
if ( this . destroyed ) {
2322
- this . _readyCapability . reject ( new Error ( "Worker was destroyed" ) ) ;
2342
+ this . #capability . reject ( new Error ( "Worker was destroyed" ) ) ;
2323
2343
return ;
2324
2344
}
2325
2345
const port = new LoopbackPort ( ) ;
2326
- this . _port = port ;
2346
+ this . #port = port ;
2327
2347
2328
2348
// All fake workers use the same port, making id unique.
2329
2349
const id = `fake${ PDFWorker . #fakeWorkerId++ } ` ;
@@ -2333,11 +2353,11 @@ class PDFWorker {
2333
2353
const workerHandler = new MessageHandler ( id + "_worker" , id , port ) ;
2334
2354
WorkerMessageHandler . setup ( workerHandler , port ) ;
2335
2355
2336
- this . _messageHandler = new MessageHandler ( id , id + "_worker" , port ) ;
2356
+ this . #messageHandler = new MessageHandler ( id , id + "_worker" , port ) ;
2337
2357
this . #resolve( ) ;
2338
2358
} )
2339
2359
. catch ( reason => {
2340
- this . _readyCapability . reject (
2360
+ this . #capability . reject (
2341
2361
new Error ( `Setting up fake worker failed: "${ reason . message } ".` )
2342
2362
) ;
2343
2363
} ) ;
@@ -2350,29 +2370,26 @@ class PDFWorker {
2350
2370
this . destroyed = true ;
2351
2371
2352
2372
// 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 ;
2355
2375
2356
- PDFWorker . #workerPorts. delete ( this . _port ) ;
2357
- this . _port = null ;
2376
+ PDFWorker . #workerPorts. delete ( this . #port ) ;
2377
+ this . #port = null ;
2358
2378
2359
- this . _messageHandler ?. destroy ( ) ;
2360
- this . _messageHandler = null ;
2379
+ this . #messageHandler ?. destroy ( ) ;
2380
+ this . #messageHandler = null ;
2361
2381
}
2362
2382
2363
2383
/**
2364
2384
* @param {PDFWorkerParameters } params - The worker initialization parameters.
2365
2385
* @returns {PDFWorker }
2366
2386
*/
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 ) ;
2372
2389
if ( cachedPort ) {
2373
2390
if ( cachedPort . _pendingDestroy ) {
2374
2391
throw new Error (
2375
- "PDFWorker.fromPort - the worker is being destroyed.\n" +
2392
+ "PDFWorker.create - the worker is being destroyed.\n" +
2376
2393
"Please remember to await `PDFDocumentLoadingTask.destroy()`-calls."
2377
2394
) ;
2378
2395
}
0 commit comments