Skip to content

Commit fc697b3

Browse files
committed
Utilize private fields and methods more in the PDFWorker class
This replaces, wherever possible, the old semi-private fields and methods with actually private ones.
1 parent ab672f0 commit fc697b3

1 file changed

Lines changed: 50 additions & 38 deletions

File tree

src/display/api.js

Lines changed: 50 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2091,6 +2091,14 @@ class LoopbackPort {
20912091
* @param {PDFWorkerParameters} params - The worker initialization parameters.
20922092
*/
20932093
class 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

Comments
 (0)