Skip to content

Commit

Permalink
Merge pull request #19045 from Snuffleupagus/api-rm-isChrome
Browse files Browse the repository at this point in the history
[api-minor] Disable `ImageDecoder` usage by default in Chromium browsers
  • Loading branch information
timvandermeij authored Nov 17, 2024
2 parents fc04849 + 471284f commit e2bbcb5
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 18 deletions.
1 change: 0 additions & 1 deletion src/core/evaluator.js
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,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

0 comments on commit e2bbcb5

Please sign in to comment.