Merge pull request #21028 from Snuffleupagus/PDFDataRangeTransport-listener

[api-minor] Change `PDFDataRangeTransport` to use a single (internal)  listener
This commit is contained in:
Tim van der Meij 2026-04-03 19:53:39 +02:00 committed by GitHub
commit 255c3e7c14
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 50 deletions

View File

@ -607,11 +607,7 @@ class PDFDocumentLoadingTask {
class PDFDataRangeTransport {
#capability = Promise.withResolvers();
#progressiveDoneListeners = [];
#progressiveReadListeners = [];
#rangeListeners = [];
#listener = null;
/**
* @param {number} length
@ -643,35 +639,12 @@ class PDFDataRangeTransport {
}
}
/**
* @param {function} listener
*/
addRangeListener(listener) {
this.#rangeListeners.push(listener);
}
/**
* @param {function} listener
*/
addProgressiveReadListener(listener) {
this.#progressiveReadListeners.push(listener);
}
/**
* @param {function} listener
*/
addProgressiveDoneListener(listener) {
this.#progressiveDoneListeners.push(listener);
}
/**
* @param {number} begin
* @param {Uint8Array|null} chunk
*/
onDataRange(begin, chunk) {
for (const listener of this.#rangeListeners) {
listener(begin, chunk);
}
this.#listener({ type: "range", begin, chunk });
}
/**
@ -679,21 +652,18 @@ class PDFDataRangeTransport {
*/
onDataProgressiveRead(chunk) {
this.#capability.promise.then(() => {
for (const listener of this.#progressiveReadListeners) {
listener(chunk);
}
this.#listener({ type: "progressiveRead", chunk });
});
}
onDataProgressiveDone() {
this.#capability.promise.then(() => {
for (const listener of this.#progressiveDoneListeners) {
listener();
}
this.#listener({ type: "progressiveDone" });
});
}
transportReady() {
transportReady(listener) {
this.#listener = listener;
this.#capability.resolve();
}

View File

@ -56,20 +56,19 @@ class PDFDataTransportStream extends BasePDFStream {
}
this._progressiveDone = progressiveDone;
pdfDataRangeTransport.addRangeListener((begin, chunk) => {
this.#onReceiveData(begin, chunk);
});
pdfDataRangeTransport.addProgressiveReadListener(chunk => {
this.#onReceiveData(/* begin = */ undefined, chunk);
});
pdfDataRangeTransport.addProgressiveDoneListener(() => {
this._fullReader?.progressiveDone();
this._progressiveDone = true;
});
pdfDataRangeTransport.transportReady();
const listener = args => {
switch (args.type) {
case "range":
case "progressiveRead":
this.#onReceiveData(args.begin, args.chunk);
break;
case "progressiveDone":
this._fullReader?.progressiveDone();
this._progressiveDone = true;
break;
}
};
pdfDataRangeTransport.transportReady(listener);
}
#onReceiveData(begin, chunk) {