From f44cba86d5a67d6a867ded95b341cce01b301de6 Mon Sep 17 00:00:00 2001 From: Tim van der Meij Date: Sun, 16 Mar 2025 14:40:15 +0100 Subject: [PATCH] Don't get ICC color space files if required API options are missing This commit improves validation of the API options for the ICC color space logic. If `useWasm` is `true` but the corresponding `wasmUrl` or `iccUrl` API options are not provided we can avoid requesting files with `null` URLs which always results in a 404 response. --- src/core/colorspace_utils.js | 2 +- src/core/icc_colorspace.js | 27 ++++++++++++++++++++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/core/colorspace_utils.js b/src/core/colorspace_utils.js index 264e40c2c..04fa44dd8 100644 --- a/src/core/colorspace_utils.js +++ b/src/core/colorspace_utils.js @@ -289,7 +289,7 @@ class ColorSpaceUtils { } static get cmyk() { - if (IccColorSpace.isUsable) { + if (CmykICCBasedCS.isUsable) { try { return shadow(this, "cmyk", new CmykICCBasedCS()); } catch { diff --git a/src/core/icc_colorspace.js b/src/core/icc_colorspace.js index d2c588d17..b269f887f 100644 --- a/src/core/icc_colorspace.js +++ b/src/core/icc_colorspace.js @@ -130,11 +130,15 @@ class IccColorSpace extends ColorSpace { static get isUsable() { let isUsable = false; if (this.#useWasm) { - try { - this._module = QCMS._module = this.#load(); - isUsable = !!this._module; - } catch (e) { - warn(`ICCBased color space: "${e}".`); + 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"); } } @@ -169,6 +173,19 @@ 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 };