Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[api-minor] Disable ImageDecoder usage by default in Chromium browsers #19045

Merged
merged 1 commit into from
Nov 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/core/evaluator.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ const DefaultPartialEvaluatorOptions = Object.freeze({
isEvalSupported: true,
isOffscreenCanvasSupported: false,
isImageDecoderSupported: false,
isChrome: false,
canvasMaxAreaInBytes: -1,
fontExtraProperties: false,
useSystemFonts: true,
Expand Down
6 changes: 1 addition & 5 deletions src/core/image_resizer.js
Original file line number Diff line number Diff line change
Expand Up @@ -120,17 +120,13 @@ class ImageResizer {

static setOptions({
canvasMaxAreaInBytes = -1,
isChrome = false,
isImageDecoderSupported = false,
}) {
if (!this._hasMaxArea) {
// Divide by 4 to have the value in pixels.
this.MAX_AREA = canvasMaxAreaInBytes >> 2;
}
// TODO: remove the isChrome, once Chrome doesn't crash anymore with
// issue6741.pdf.
// https://issues.chromium.org/issues/374807001.
this.#isImageDecoderSupported = isImageDecoderSupported && !isChrome;
this.#isImageDecoderSupported = isImageDecoderSupported;
}

static _areGoodDims(width, height) {
Expand Down
30 changes: 18 additions & 12 deletions src/display/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,17 @@ const DefaultStandardFontDataFactory =
* `ImageDecoder` in the worker. Primarily used to improve performance of
* image conversion/rendering.
* The default value is `true` in web environments and `false` in Node.js.
* @property {boolean} [isChrome] - Determines if we can use bmp ImageDecoder.
* NOTE: Temporary option until [https://issues.chromium.org/issues/374807001]
* is fixed.
*
* NOTE: Also temporarily disabled in Chromium browsers, until we no longer
* support the affected browser versions, because of various bugs:
*
* - Crashes when using the BMP decoder with huge images, e.g. issue6741.pdf;
* see https://issues.chromium.org/issues/374807001
*
* - Broken images when using the JPEG decoder with images that have custom
* colour profiles, e.g. GitHub discussion 19030;
* see https://issues.chromium.org/issues/378869810
*
* @property {number} [canvasMaxAreaInBytes] - The integer value is used to
* know when an image must be resized (uses `OffscreenCanvas` in the worker).
* If it's -1 then a possibly slow algorithm is used to guess the max value.
Expand Down Expand Up @@ -289,16 +297,15 @@ function getDocument(src = {}) {
? src.isOffscreenCanvasSupported
: !isNodeJS;
const isImageDecoderSupported =
// eslint-disable-next-line no-nested-ternary
typeof src.isImageDecoderSupported === "boolean"
? src.isImageDecoderSupported
: !isNodeJS;
const isChrome =
typeof src.isChrome === "boolean"
? src.isChrome
: (typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) &&
!FeatureTest.platform.isFirefox &&
typeof window !== "undefined" &&
!!window?.chrome;
: // eslint-disable-next-line no-nested-ternary
typeof PDFJSDev !== "undefined" && PDFJSDev.test("MOZCENTRAL")
? true
: typeof PDFJSDev !== "undefined" && PDFJSDev.test("CHROME")
? false
: !isNodeJS && (FeatureTest.platform.isFirefox || !globalThis.chrome);
const canvasMaxAreaInBytes = Number.isInteger(src.canvasMaxAreaInBytes)
? src.canvasMaxAreaInBytes
: -1;
Expand Down Expand Up @@ -404,7 +411,6 @@ function getDocument(src = {}) {
isEvalSupported,
isOffscreenCanvasSupported,
isImageDecoderSupported,
isChrome,
canvasMaxAreaInBytes,
fontExtraProperties,
useSystemFonts,
Expand Down