Stop using the source
-object when sending "GetDocRequest"
Looking at the code on the worker-thread, there doesn't appear to be any particular reason for placing *some* of the properties in a `source`-object when sending them with "GetDocRequest". As is often the case the explanation for this structure is rather "for historical reasons", since originally we simply sent the `source`-object as-is. Doing that was obviously a bad idea, for a couple of reasons: - It makes it less clear what is/isn't actually needed on the worker-thread. - Sending unused properties will unnecessarily increase memory usage. - The `source`-object may contain unclonable data, which would break the library.
This commit is contained in:
parent
c84b717773
commit
8a4f6aca97
@ -97,7 +97,7 @@ class WorkerMessageHandler {
|
||||
const WorkerTasks = [];
|
||||
const verbosity = getVerbosityLevel();
|
||||
|
||||
const apiVersion = docParams.apiVersion;
|
||||
const { docId, apiVersion } = docParams;
|
||||
const workerVersion =
|
||||
typeof PDFJSDev !== "undefined" && !PDFJSDev.test("TESTING")
|
||||
? PDFJSDev.eval("BUNDLE_VERSION")
|
||||
@ -142,10 +142,7 @@ class WorkerMessageHandler {
|
||||
throw new Error(partialMsg + "please update to a supported browser.");
|
||||
}
|
||||
}
|
||||
|
||||
const docId = docParams.docId;
|
||||
const docBaseUrl = docParams.docBaseUrl;
|
||||
const workerHandlerName = docParams.docId + "_worker";
|
||||
const workerHandlerName = docId + "_worker";
|
||||
let handler = new MessageHandler(workerHandlerName, docId, port);
|
||||
|
||||
function ensureNotTerminated() {
|
||||
@ -204,17 +201,25 @@ class WorkerMessageHandler {
|
||||
return { numPages, fingerprints, htmlForXfa };
|
||||
}
|
||||
|
||||
function getPdfManager(data, evaluatorOptions, enableXfa) {
|
||||
function getPdfManager({
|
||||
data,
|
||||
password,
|
||||
disableAutoFetch,
|
||||
rangeChunkSize,
|
||||
length,
|
||||
docBaseUrl,
|
||||
enableXfa,
|
||||
evaluatorOptions,
|
||||
}) {
|
||||
const pdfManagerCapability = createPromiseCapability();
|
||||
let newPdfManager;
|
||||
|
||||
const source = data.source;
|
||||
if (source.data) {
|
||||
if (data) {
|
||||
try {
|
||||
newPdfManager = new LocalPdfManager(
|
||||
docId,
|
||||
source.data,
|
||||
source.password,
|
||||
data,
|
||||
password,
|
||||
handler,
|
||||
evaluatorOptions,
|
||||
enableXfa,
|
||||
@ -242,19 +247,19 @@ class WorkerMessageHandler {
|
||||
if (!fullRequest.isRangeSupported) {
|
||||
return;
|
||||
}
|
||||
|
||||
// We don't need auto-fetch when streaming is enabled.
|
||||
const disableAutoFetch =
|
||||
source.disableAutoFetch || fullRequest.isStreamingSupported;
|
||||
disableAutoFetch =
|
||||
disableAutoFetch || fullRequest.isStreamingSupported;
|
||||
|
||||
newPdfManager = new NetworkPdfManager(
|
||||
docId,
|
||||
pdfStream,
|
||||
{
|
||||
msgHandler: handler,
|
||||
password: source.password,
|
||||
password,
|
||||
length: fullRequest.contentLength,
|
||||
disableAutoFetch,
|
||||
rangeChunkSize: source.rangeChunkSize,
|
||||
rangeChunkSize,
|
||||
},
|
||||
evaluatorOptions,
|
||||
enableXfa,
|
||||
@ -279,7 +284,7 @@ class WorkerMessageHandler {
|
||||
let loaded = 0;
|
||||
const flushChunks = function () {
|
||||
const pdfFile = arraysToBytes(cachedChunks);
|
||||
if (source.length && pdfFile.length !== source.length) {
|
||||
if (length && pdfFile.length !== length) {
|
||||
warn("reported HTTP length is different from actual");
|
||||
}
|
||||
// the data is array, instantiating directly from it
|
||||
@ -287,7 +292,7 @@ class WorkerMessageHandler {
|
||||
newPdfManager = new LocalPdfManager(
|
||||
docId,
|
||||
pdfFile,
|
||||
source.password,
|
||||
password,
|
||||
handler,
|
||||
evaluatorOptions,
|
||||
enableXfa,
|
||||
@ -405,7 +410,7 @@ class WorkerMessageHandler {
|
||||
|
||||
ensureNotTerminated();
|
||||
|
||||
getPdfManager(data, data.evaluatorOptions, data.enableXfa)
|
||||
getPdfManager(data)
|
||||
.then(function (newPdfManager) {
|
||||
if (terminated) {
|
||||
// We were in a process of setting up the manager, but it got
|
||||
|
@ -503,20 +503,18 @@ async function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
|
||||
}
|
||||
const workerId = await worker.messageHandler.sendWithPromise(
|
||||
"GetDocRequest",
|
||||
// Only send the required properties, and *not* the entire `source` object.
|
||||
{
|
||||
docId,
|
||||
apiVersion:
|
||||
typeof PDFJSDev !== "undefined" && !PDFJSDev.test("TESTING")
|
||||
? PDFJSDev.eval("BUNDLE_VERSION")
|
||||
: null,
|
||||
// Only send the required properties, and *not* the entire object.
|
||||
source: {
|
||||
data: source.data,
|
||||
password: source.password,
|
||||
disableAutoFetch: source.disableAutoFetch,
|
||||
rangeChunkSize: source.rangeChunkSize,
|
||||
length: source.length,
|
||||
},
|
||||
data: source.data,
|
||||
password: source.password,
|
||||
disableAutoFetch: source.disableAutoFetch,
|
||||
rangeChunkSize: source.rangeChunkSize,
|
||||
length: source.length,
|
||||
docBaseUrl: source.docBaseUrl,
|
||||
enableXfa: source.enableXfa,
|
||||
evaluatorOptions: {
|
||||
|
Loading…
x
Reference in New Issue
Block a user