Merge pull request #16047 from Snuffleupagus/BasePdfManager-args

Improve the consistency between the `LocalPdfManager`/`NetworkPdfManager` constructor
This commit is contained in:
Tim van der Meij 2023-02-11 18:58:29 +01:00 committed by GitHub
commit ec4c84176f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 71 deletions

View File

@ -36,10 +36,15 @@ function parseDocBaseUrl(url) {
} }
class BasePdfManager { class BasePdfManager {
constructor() { constructor(args) {
if (this.constructor === BasePdfManager) { if (this.constructor === BasePdfManager) {
unreachable("Cannot initialize BasePdfManager."); unreachable("Cannot initialize BasePdfManager.");
} }
this._docBaseUrl = parseDocBaseUrl(args.docBaseUrl);
this._docId = args.docId;
this._password = args.password;
this.enableXfa = args.enableXfa;
this.evaluatorOptions = args.evaluatorOptions;
} }
get docId() { get docId() {
@ -117,25 +122,10 @@ class BasePdfManager {
} }
class LocalPdfManager extends BasePdfManager { class LocalPdfManager extends BasePdfManager {
constructor( constructor(args) {
docId, super(args);
data,
password,
msgHandler,
evaluatorOptions,
enableXfa,
docBaseUrl
) {
super();
this._docId = docId; const stream = new Stream(args.source);
this._password = password;
this._docBaseUrl = parseDocBaseUrl(docBaseUrl);
this.msgHandler = msgHandler;
this.evaluatorOptions = evaluatorOptions;
this.enableXfa = enableXfa;
const stream = new Stream(data);
this.pdfDocument = new PDFDocument(this, stream); this.pdfDocument = new PDFDocument(this, stream);
this._loadedStreamPromise = Promise.resolve(stream); this._loadedStreamPromise = Promise.resolve(stream);
} }
@ -160,25 +150,11 @@ class LocalPdfManager extends BasePdfManager {
} }
class NetworkPdfManager extends BasePdfManager { class NetworkPdfManager extends BasePdfManager {
constructor( constructor(args) {
docId, super(args);
pdfNetworkStream,
args,
evaluatorOptions,
enableXfa,
docBaseUrl
) {
super();
this._docId = docId; this.streamManager = new ChunkedStreamManager(args.source, {
this._password = args.password; msgHandler: args.handler,
this._docBaseUrl = parseDocBaseUrl(docBaseUrl);
this.msgHandler = args.msgHandler;
this.evaluatorOptions = evaluatorOptions;
this.enableXfa = enableXfa;
this.streamManager = new ChunkedStreamManager(pdfNetworkStream, {
msgHandler: args.msgHandler,
length: args.length, length: args.length,
disableAutoFetch: args.disableAutoFetch, disableAutoFetch: args.disableAutoFetch,
rangeChunkSize: args.rangeChunkSize, rangeChunkSize: args.rangeChunkSize,

View File

@ -210,20 +210,26 @@ class WorkerMessageHandler {
enableXfa, enableXfa,
evaluatorOptions, evaluatorOptions,
}) { }) {
const pdfManagerArgs = {
source: null,
disableAutoFetch,
docBaseUrl,
docId,
enableXfa,
evaluatorOptions,
handler,
length,
password,
rangeChunkSize,
};
const pdfManagerCapability = createPromiseCapability(); const pdfManagerCapability = createPromiseCapability();
let newPdfManager; let newPdfManager;
if (data) { if (data) {
try { try {
newPdfManager = new LocalPdfManager( pdfManagerArgs.source = data;
docId,
data, newPdfManager = new LocalPdfManager(pdfManagerArgs);
password,
handler,
evaluatorOptions,
enableXfa,
docBaseUrl
);
pdfManagerCapability.resolve(newPdfManager); pdfManagerCapability.resolve(newPdfManager);
} catch (ex) { } catch (ex) {
pdfManagerCapability.reject(ex); pdfManagerCapability.reject(ex);
@ -246,24 +252,13 @@ class WorkerMessageHandler {
if (!fullRequest.isRangeSupported) { if (!fullRequest.isRangeSupported) {
return; return;
} }
pdfManagerArgs.source = pdfStream;
pdfManagerArgs.length = fullRequest.contentLength;
// We don't need auto-fetch when streaming is enabled. // We don't need auto-fetch when streaming is enabled.
disableAutoFetch = pdfManagerArgs.disableAutoFetch =
disableAutoFetch || fullRequest.isStreamingSupported; pdfManagerArgs.disableAutoFetch || fullRequest.isStreamingSupported;
newPdfManager = new NetworkPdfManager( newPdfManager = new NetworkPdfManager(pdfManagerArgs);
docId,
pdfStream,
{
msgHandler: handler,
password,
length: fullRequest.contentLength,
disableAutoFetch,
rangeChunkSize,
},
evaluatorOptions,
enableXfa,
docBaseUrl
);
// There may be a chance that `newPdfManager` is not initialized for // There may be a chance that `newPdfManager` is not initialized for
// the first few runs of `readchunk` block of code. Be sure to send // the first few runs of `readchunk` block of code. Be sure to send
// all cached chunks, if any, to chunked_stream via pdf_manager. // all cached chunks, if any, to chunked_stream via pdf_manager.
@ -288,15 +283,9 @@ class WorkerMessageHandler {
} }
// the data is array, instantiating directly from it // the data is array, instantiating directly from it
try { try {
newPdfManager = new LocalPdfManager( pdfManagerArgs.source = pdfFile;
docId,
pdfFile, newPdfManager = new LocalPdfManager(pdfManagerArgs);
password,
handler,
evaluatorOptions,
enableXfa,
docBaseUrl
);
pdfManagerCapability.resolve(newPdfManager); pdfManagerCapability.resolve(newPdfManager);
} catch (ex) { } catch (ex) {
pdfManagerCapability.reject(ex); pdfManagerCapability.reject(ex);