From 18e0b10d3cb142313f45855878afec496c4e9496 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 29 Jan 2020 11:37:52 +0100 Subject: [PATCH] [api-minor] Remove the `disableCreateObjectURL` option from the `getDocument` parameters, since it's now unused in the API With the changes in previous patches, the `disableCreateObjectURL` option/functionality is no longer used for anything in the API and/or in the Worker code. Note however that there's some functionality, mainly related to file loading/downloading, in the GENERIC version of the default viewer which still depends on this option. Hence the `disableCreateObjectURL` option (and related compatibility code) is moved into the viewer, see e.g. `web/app_options.js`, such that it's still available in the default viewer. --- src/core/evaluator.js | 1 - src/core/worker.js | 1 - src/display/api.js | 9 --------- src/display/api_compatibility.js | 15 --------------- src/display/svg.js | 2 +- web/app.js | 2 +- web/app_options.js | 13 ++++++------- web/download_manager.js | 9 +++------ web/pdf_attachment_viewer.js | 6 +----- web/pdf_print_service.js | 3 +-- web/viewer_compatibility.js | 12 ++++++++++++ 11 files changed, 25 insertions(+), 48 deletions(-) diff --git a/src/core/evaluator.js b/src/core/evaluator.js index 2d99beb8e..4a307f142 100644 --- a/src/core/evaluator.js +++ b/src/core/evaluator.js @@ -85,7 +85,6 @@ import { PDFImage } from "./image.js"; var PartialEvaluator = (function PartialEvaluatorClosure() { const DefaultPartialEvaluatorOptions = { - forceDataSchema: false, maxImageSize: -1, disableFontFace: false, ignoreErrors: false, diff --git a/src/core/worker.js b/src/core/worker.js index fb37d7ee3..ce63121d3 100644 --- a/src/core/worker.js +++ b/src/core/worker.js @@ -399,7 +399,6 @@ var WorkerMessageHandler = { ensureNotTerminated(); var evaluatorOptions = { - forceDataSchema: data.disableCreateObjectURL, maxImageSize: data.maxImageSize, disableFontFace: data.disableFontFace, ignoreErrors: data.ignoreErrors, diff --git a/src/display/api.js b/src/display/api.js index ca517edc7..3d6ee47cc 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -154,9 +154,6 @@ function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { * The default value is `false`. * NOTE: It is also necessary to disable streaming, see above, * in order for disabling of pre-fetching to work correctly. - * @property {boolean} [disableCreateObjectURL] - Disable the use of - * `URL.createObjectURL`, for compatibility with older browsers. - * The default value is `false`. * @property {boolean} [pdfBug] - Enables special hooks for debugging * PDF.js (see `web/debugger.js`). The default value is `false`. */ @@ -269,10 +266,6 @@ function getDocument(src) { if (typeof params.disableAutoFetch !== "boolean") { params.disableAutoFetch = false; } - if (typeof params.disableCreateObjectURL !== "boolean") { - params.disableCreateObjectURL = - apiCompatibilityParams.disableCreateObjectURL || false; - } // Set the main-thread verbosity level. setVerbosityLevel(params.verbosity); @@ -395,7 +388,6 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { }, maxImageSize: source.maxImageSize, disableFontFace: source.disableFontFace, - disableCreateObjectURL: source.disableCreateObjectURL, postMessageTransfers: worker.postMessageTransfers, docBaseUrl: source.docBaseUrl, ignoreErrors: source.ignoreErrors, @@ -2505,7 +2497,6 @@ class WorkerTransport { const params = this._params; return shadow(this, "loadingParams", { disableAutoFetch: params.disableAutoFetch, - disableCreateObjectURL: params.disableCreateObjectURL, disableFontFace: params.disableFontFace, }); } diff --git a/src/display/api_compatibility.js b/src/display/api_compatibility.js index dd0a35641..d610e3fae 100644 --- a/src/display/api_compatibility.js +++ b/src/display/api_compatibility.js @@ -17,21 +17,6 @@ import { isNodeJS } from "../shared/is_node.js"; const compatibilityParams = Object.create(null); if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) { - const userAgent = - (typeof navigator !== "undefined" && navigator.userAgent) || ""; - const isIE = /Trident/.test(userAgent); - const isIOSChrome = /CriOS/.test(userAgent); - - // Checks if possible to use URL.createObjectURL() - // Support: IE, Chrome on iOS - (function checkOnBlobSupport() { - // Sometimes IE and Chrome on iOS losing the data created with - // createObjectURL(), see issues #3977 and #8081. - if (isIE || isIOSChrome) { - compatibilityParams.disableCreateObjectURL = true; - } - })(); - // Support: Node.js (function checkFontFace() { // Node.js is missing native support for `@font-face`. diff --git a/src/display/svg.js b/src/display/svg.js index dccd3a22c..4631b5d4f 100644 --- a/src/display/svg.js +++ b/src/display/svg.js @@ -440,7 +440,7 @@ if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) { // eslint-disable-next-line no-shadow SVGGraphics = class SVGGraphics { - constructor(commonObjs, objs, forceDataSchema) { + constructor(commonObjs, objs, forceDataSchema = false) { this.svgFactory = new DOMSVGFactory(); this.current = new SVGExtraState(); diff --git a/web/app.js b/web/app.js index f4956dd65..1d442f0a1 100644 --- a/web/app.js +++ b/web/app.js @@ -2223,7 +2223,7 @@ if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) { } const file = evt.fileInput.files[0]; - if (URL.createObjectURL && !AppOptions.get("disableCreateObjectURL")) { + if (!AppOptions.get("disableCreateObjectURL")) { let url = URL.createObjectURL(file); if (file.name) { url = { url, originalUrl: file.name }; diff --git a/web/app_options.js b/web/app_options.js index f3ac76d8a..8b68d7525 100644 --- a/web/app_options.js +++ b/web/app_options.js @@ -13,7 +13,6 @@ * limitations under the License. */ -import { apiCompatibilityParams } from "pdfjs-lib"; import { viewerCompatibilityParams } from "./viewer_compatibility.js"; const OptionKind = { @@ -43,6 +42,12 @@ const defaultOptions = { value: "", kind: OptionKind.VIEWER + OptionKind.PREFERENCE, }, + disableCreateObjectURL: { + /** @type {boolean} */ + value: false, + compatibility: viewerCompatibilityParams.disableCreateObjectURL, + kind: OptionKind.VIEWER, + }, disableHistory: { /** @type {boolean} */ value: false, @@ -174,12 +179,6 @@ const defaultOptions = { value: false, kind: OptionKind.API + OptionKind.PREFERENCE, }, - disableCreateObjectURL: { - /** @type {boolean} */ - value: false, - compatibility: apiCompatibilityParams.disableCreateObjectURL, - kind: OptionKind.API, - }, disableFontFace: { /** @type {boolean} */ value: false, diff --git a/web/download_manager.js b/web/download_manager.js index 5c5401550..00ec1675d 100644 --- a/web/download_manager.js +++ b/web/download_manager.js @@ -13,11 +13,8 @@ * limitations under the License. */ -import { - apiCompatibilityParams, - createObjectURL, - createValidAbsoluteUrl, -} from "pdfjs-lib"; +import { createObjectURL, createValidAbsoluteUrl } from "pdfjs-lib"; +import { viewerCompatibilityParams } from "./viewer_compatibility.js"; if (typeof PDFJSDev !== "undefined" && !PDFJSDev.test("CHROME || GENERIC")) { throw new Error( @@ -27,7 +24,7 @@ if (typeof PDFJSDev !== "undefined" && !PDFJSDev.test("CHROME || GENERIC")) { } const DISABLE_CREATE_OBJECT_URL = - apiCompatibilityParams.disableCreateObjectURL || false; + viewerCompatibilityParams.disableCreateObjectURL || false; function download(blobUrl, filename) { const a = document.createElement("a"); diff --git a/web/pdf_attachment_viewer.js b/web/pdf_attachment_viewer.js index 198162b93..529c77121 100644 --- a/web/pdf_attachment_viewer.js +++ b/web/pdf_attachment_viewer.js @@ -74,14 +74,10 @@ class PDFAttachmentViewer { } /** + * NOTE: Should only be used when `URL.createObjectURL` is natively supported. * @private */ _bindPdfLink(button, content, filename) { - if (this.downloadManager.disableCreateObjectURL) { - throw new Error( - 'bindPdfLink: Unsupported "disableCreateObjectURL" value.' - ); - } let blobUrl; button.onclick = () => { if (!blobUrl) { diff --git a/web/pdf_print_service.js b/web/pdf_print_service.js index d6f5b3311..d16792c7f 100644 --- a/web/pdf_print_service.js +++ b/web/pdf_print_service.js @@ -65,8 +65,7 @@ function PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n) { this.pagesOverview = pagesOverview; this.printContainer = printContainer; this.l10n = l10n || NullL10n; - this.disableCreateObjectURL = - pdfDocument.loadingParams.disableCreateObjectURL; + this.disableCreateObjectURL = AppOptions.get("disableCreateObjectURL"); this.currentPage = -1; // The temporary canvas where renderPage paints one page at a time. this.scratchCanvas = document.createElement("canvas"); diff --git a/web/viewer_compatibility.js b/web/viewer_compatibility.js index db8421a79..b998f49ae 100644 --- a/web/viewer_compatibility.js +++ b/web/viewer_compatibility.js @@ -23,9 +23,21 @@ if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) { (typeof navigator !== "undefined" && navigator.maxTouchPoints) || 1; const isAndroid = /Android/.test(userAgent); + const isIE = /Trident/.test(userAgent); const isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent) || (platform === "MacIntel" && maxTouchPoints > 1); + const isIOSChrome = /CriOS/.test(userAgent); + + // Checks if possible to use URL.createObjectURL() + // Support: IE, Chrome on iOS + (function checkOnBlobSupport() { + // Sometimes IE and Chrome on iOS losing the data created with + // createObjectURL(), see issues #3977 and #8081. + if (isIE || isIOSChrome) { + compatibilityParams.disableCreateObjectURL = true; + } + })(); // Limit canvas size to 5 mega-pixels on mobile. // Support: Android, iOS