Compare commits

..

No commits in common. "e7385669007310f317dfb9cb794cb343f19450a2" and "f8c2a949b73cb4b9a08bc4f433d2073f29838b62" have entirely different histories.

6 changed files with 38 additions and 117 deletions

View File

@ -1,5 +1,5 @@
{
"stableVersion": "5.0.375",
"baseVersion": "d86045eacbd6f8cc9cbe8fd616800ca3edcbd0dc",
"versionPrefix": "5.1."
"baseVersion": "7a57af12e13a47927c460e6b739a6ca132e7603d",
"versionPrefix": "5.0."
}

View File

@ -289,7 +289,7 @@ class ColorSpaceUtils {
}
static get cmyk() {
if (CmykICCBasedCS.isUsable) {
if (IccColorSpace.isUsable) {
try {
return shadow(this, "cmyk", new CmykICCBasedCS());
} catch {

View File

@ -130,15 +130,11 @@ class IccColorSpace extends ColorSpace {
static get isUsable() {
let isUsable = false;
if (this.#useWasm) {
if (this.#wasmUrl) {
try {
this._module = QCMS._module = this.#load();
isUsable = !!this._module;
} catch (e) {
warn(`ICCBased color space: "${e}".`);
}
} else {
warn("No ICC color space support due to missing `wasmUrl` API option");
try {
this._module = QCMS._module = this.#load();
isUsable = !!this._module;
} catch (e) {
warn(`ICCBased color space: "${e}".`);
}
}
@ -173,19 +169,6 @@ class CmykICCBasedCS extends IccColorSpace {
static setOptions({ iccUrl }) {
this.#iccUrl = iccUrl;
}
static get isUsable() {
let isUsable = false;
if (IccColorSpace.isUsable) {
if (this.#iccUrl) {
isUsable = true;
} else {
warn("No CMYK ICC profile support due to missing `iccUrl` API option");
}
}
return shadow(this, "isUsable", isUsable);
}
}
export { CmykICCBasedCS, IccColorSpace };

View File

@ -629,48 +629,39 @@ const isValidExplicitDest = _isValidExplicitDest.bind(
class PDFDocumentLoadingTask {
static #docId = 0;
/**
* @private
*/
_capability = Promise.withResolvers();
constructor() {
this._capability = Promise.withResolvers();
this._transport = null;
this._worker = null;
/**
* @private
*/
_transport = null;
/**
* Unique identifier for the document loading task.
* @type {string}
*/
this.docId = `d${PDFDocumentLoadingTask.#docId++}`;
/**
* @private
*/
_worker = null;
/**
* Whether the loading task is destroyed or not.
* @type {boolean}
*/
this.destroyed = false;
/**
* Unique identifier for the document loading task.
* @type {string}
*/
docId = `d${PDFDocumentLoadingTask.#docId++}`;
/**
* Callback to request a password if a wrong or no password was provided.
* The callback receives two parameters: a function that should be called
* with the new password, and a reason (see {@link PasswordResponses}).
* @type {function}
*/
this.onPassword = null;
/**
* Whether the loading task is destroyed or not.
* @type {boolean}
*/
destroyed = false;
/**
* Callback to request a password if a wrong or no password was provided.
* The callback receives two parameters: a function that should be called
* with the new password, and a reason (see {@link PasswordResponses}).
* @type {function}
*/
onPassword = null;
/**
* Callback to be able to monitor the loading progress of the PDF file
* (necessary to implement e.g. a loading bar).
* The callback receives an {@link OnProgressParameters} argument.
* @type {function}
*/
onProgress = null;
/**
* Callback to be able to monitor the loading progress of the PDF file
* (necessary to implement e.g. a loading bar).
* The callback receives an {@link OnProgressParameters} argument.
* @type {function}
*/
this.onProgress = null;
}
/**
* Promise for document loading task completion.
@ -708,16 +699,6 @@ class PDFDocumentLoadingTask {
this._worker?.destroy();
this._worker = null;
}
/**
* Attempt to fetch the raw data of the PDF document, when e.g.
* - An exception was thrown during document initialization.
* - An `onPassword` callback is delaying initialization.
* @returns {Promise<Uint8Array>}
*/
async getData() {
return this._transport.getData();
}
}
/**

View File

@ -828,47 +828,6 @@ describe("api", function () {
await loadingTask.destroy();
});
it("gets data, on failure, from `PDFDocumentLoadingTask`-instance", async function () {
const typedArrayPdf = await DefaultFileReaderFactory.fetch({
path: TEST_PDFS_PATH + "issue6010_1.pdf",
});
// Sanity check to make sure that we fetched the entire PDF file.
expect(typedArrayPdf instanceof Uint8Array).toEqual(true);
expect(typedArrayPdf.length).toEqual(1116);
const loadingTask = getDocument(typedArrayPdf.slice());
expect(loadingTask instanceof PDFDocumentLoadingTask).toEqual(true);
let passwordData = null;
// Attach the callback that is used to request a password;
// similarly to how the default viewer handles passwords.
loadingTask.onPassword = async (updatePassword, reason) => {
passwordData = await loadingTask.getData();
updatePassword(new Error("Should reject the loadingTask."));
};
try {
await loadingTask.promise;
// Shouldn't get here.
expect(false).toEqual(true);
} catch (ex) {
expect(ex instanceof PasswordException).toEqual(true);
expect(ex.code).toEqual(PasswordResponses.NEED_PASSWORD);
}
// Ensure that the raw PDF document can be fetched while
// an `onPassword` callback is delaying initialization...
expect(passwordData).toEqual(typedArrayPdf);
// ... and once an exception has stopped initialization.
const data = await loadingTask.getData();
expect(data).toEqual(typedArrayPdf);
await loadingTask.destroy();
});
});
describe("PDFWorker", function () {

View File

@ -1153,9 +1153,7 @@ const PDFViewerApplication = {
async download() {
let data;
try {
data = await (this.pdfDocument
? this.pdfDocument.getData()
: this.pdfLoadingTask.getData());
data = await this.pdfDocument.getData();
} catch {
// When the PDF document isn't ready, simply download using the URL.
}