Remove useless message handlers

These handlers are used to initiate the communication between
the content thread and the worker and they aren't used once the
document is loaded, hence we can remove them.
This commit is contained in:
Calixte Denizet 2023-11-25 18:40:43 +01:00
parent 9d863f5180
commit 37d5f2d2ca
3 changed files with 19 additions and 4 deletions

View File

@ -87,8 +87,11 @@ class WorkerMessageHandler {
setVerbosityLevel(data.verbosity);
});
handler.on("GetDocRequest", function (data) {
return WorkerMessageHandler.createDocumentHandler(data, port);
handler.on("GetDocRequest", function ({ source, singleUse }) {
if (singleUse) {
handler.destroy();
}
return WorkerMessageHandler.createDocumentHandler(source, port);
});
}

View File

@ -216,6 +216,8 @@ const DefaultStandardFontDataFactory =
* when creating canvases. The default value is {new DOMCanvasFactory()}.
* @property {Object} [filterFactory] - A factory instance that will be used
* to create SVG filters when rendering some images on the main canvas.
* @property {boolean} [singleUse] - When true the worker will be able to load
* only one PDF document, using the `getDocument` method.
*/
/**
@ -346,12 +348,13 @@ function getDocument(src) {
baseUrl: standardFontDataUrl,
});
}
if (!worker) {
const workerParams = {
verbosity,
port: GlobalWorkerOptions.workerPort,
singleUse: src.singleUse === true,
};
// Worker was not provided -- creating and owning our own. If message port
// is specified in global worker options, using it.
worker = workerParams.port
@ -456,6 +459,12 @@ function getDocument(src) {
throw new Error("Loading aborted");
}
if (worker._singleUse) {
// We don't the messageHandler anymore.
worker._messageHandler.destroy();
worker._messageHandler = null;
}
const messageHandler = new MessageHandler(
docId,
workerId,
@ -493,7 +502,7 @@ async function _fetchDocument(worker, source) {
}
const workerId = await worker.messageHandler.sendWithPromise(
"GetDocRequest",
source,
{ source, singleUse: worker._singleUse },
source.data ? [source.data.buffer] : null
);
@ -2029,6 +2038,7 @@ class PDFWorker {
name = null,
port = null,
verbosity = getVerbosityLevel(),
singleUse = false,
} = {}) {
this.name = name;
this.destroyed = false;
@ -2038,6 +2048,7 @@ class PDFWorker {
this._port = null;
this._webWorker = null;
this._messageHandler = null;
this._singleUse = singleUse;
if (
(typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) &&

View File

@ -1000,6 +1000,7 @@ const PDFViewerApplication = {
const loadingTask = getDocument({
...apiParams,
...args,
singleUse: true,
});
this.pdfLoadingTask = loadingTask;