From 212553840f8b761461e11214239bf57fb1173c1d Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Sat, 17 Feb 2018 23:13:49 +0100 Subject: [PATCH] Move the `pdfBug` option from the global `PDFJS` object and into `getDocument` instead Also removes the now unused `getDefaultSetting` helper function. --- src/display/api.js | 27 +++++++++++++++++---------- src/display/dom_utils.js | 14 -------------- src/display/global.js | 8 -------- src/display/text_layer.js | 12 ++++++------ test/driver.js | 3 +-- web/app.js | 8 ++++---- web/app_options.js | 5 +++++ 7 files changed, 33 insertions(+), 44 deletions(-) diff --git a/src/display/api.js b/src/display/api.js index 1b86bc7a3..781bc7021 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -22,7 +22,7 @@ import { unreachable, Util, warn } from '../shared/util'; import { - DOMCanvasFactory, DOMCMapReaderFactory, DummyStatTimer, getDefaultSetting, + DOMCanvasFactory, DOMCMapReaderFactory, DummyStatTimer, RenderingCancelledException, StatTimer } from './dom_utils'; import { FontFaceObject, FontLoader } from './font_loader'; @@ -181,6 +181,8 @@ function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { * @property {boolean} disableCreateObjectURL - (optional) Disable the use of * `URL.createObjectURL`, for compatibility with older browsers. * The default value is `false`. + * @property {boolean} pdfBug - (optional) Enables special hooks for debugging + * PDF.js (see `web/debugger.js`). The default value is `false`. */ /** @@ -267,6 +269,7 @@ function getDocument(src) { params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; params.ignoreErrors = params.stopAtErrors !== true; + params.pdfBug = params.pdfBug === true; const NativeImageDecoderValues = Object.values(NativeImageDecoding); if (params.nativeImageDecoderSupport === undefined || @@ -812,12 +815,12 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() { * @alias PDFPageProxy */ var PDFPageProxy = (function PDFPageProxyClosure() { - function PDFPageProxy(pageIndex, pageInfo, transport) { + function PDFPageProxy(pageIndex, pageInfo, transport, pdfBug = false) { this.pageIndex = pageIndex; this.pageInfo = pageInfo; this.transport = transport; - this._stats = (getDefaultSetting('pdfBug') ? - new StatTimer() : DummyStatTimer); + this._stats = (pdfBug ? new StatTimer() : DummyStatTimer); + this._pdfBug = pdfBug; this.commonObjs = transport.commonObjs; this.objs = new PDFObjects(); this.cleanupAfterRender = false; @@ -954,7 +957,8 @@ var PDFPageProxy = (function PDFPageProxyClosure() { intentState.operatorList, this.pageNumber, canvasFactory, - webGLContext); + webGLContext, + this._pdfBug); internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print'; if (!intentState.renderTasks) { intentState.renderTasks = []; @@ -1860,8 +1864,8 @@ var WorkerTransport = (function WorkerTransportClosure() { break; } var fontRegistry = null; - if (getDefaultSetting('pdfBug') && globalScope.FontInspector && - globalScope['FontInspector'].enabled) { + if (params.pdfBug && globalScope.FontInspector && + globalScope.FontInspector.enabled) { fontRegistry = { registerFont(font, url) { globalScope['FontInspector'].fontAdded(font, url); @@ -2067,7 +2071,8 @@ var WorkerTransport = (function WorkerTransportClosure() { if (this.destroyed) { throw new Error('Transport destroyed'); } - var page = new PDFPageProxy(pageIndex, pageInfo, this); + let page = new PDFPageProxy(pageIndex, pageInfo, this, + this._params.pdfBug); this.pageCache[pageIndex] = page; return page; }); @@ -2327,7 +2332,8 @@ var InternalRenderTask = (function InternalRenderTaskClosure() { let canvasInRendering = new WeakMap(); function InternalRenderTask(callback, params, objs, commonObjs, operatorList, - pageNumber, canvasFactory, webGLContext) { + pageNumber, canvasFactory, webGLContext, + pdfBug = false) { this.callback = callback; this.params = params; this.objs = objs; @@ -2337,6 +2343,7 @@ var InternalRenderTask = (function InternalRenderTaskClosure() { this.pageNumber = pageNumber; this.canvasFactory = canvasFactory; this.webGLContext = webGLContext; + this._pdfBug = pdfBug; this.running = false; this.graphicsReadyCallback = null; @@ -2370,7 +2377,7 @@ var InternalRenderTask = (function InternalRenderTaskClosure() { if (this.cancelled) { return; } - if (getDefaultSetting('pdfBug') && globalScope.StepperManager && + if (this._pdfBug && globalScope.StepperManager && globalScope.StepperManager.enabled) { this.stepper = globalScope.StepperManager.create(this.pageNumber - 1); this.stepper.init(this.operatorList); diff --git a/src/display/dom_utils.js b/src/display/dom_utils.js index 3fa97f143..565c9836a 100644 --- a/src/display/dom_utils.js +++ b/src/display/dom_utils.js @@ -17,7 +17,6 @@ import { assert, CMapCompressionType, removeNullCharacters, stringToBytes, unreachable, warn } from '../shared/util'; -import globalScope from '../shared/global_scope'; const DEFAULT_LINK_REL = 'noopener noreferrer nofollow'; const SVG_NS = 'http://www.w3.org/2000/svg'; @@ -329,18 +328,6 @@ function getFilenameFromUrl(url) { return url.substring(url.lastIndexOf('/', end) + 1, end); } -function getDefaultSetting(id) { - // The list of the settings and their default is maintained for backward - // compatibility and shall not be extended or modified. See also global.js. - var globalSettings = globalScope.PDFJS; - switch (id) { - case 'pdfBug': - return globalSettings ? globalSettings.pdfBug : false; - default: - throw new Error('Unknown default setting: ' + id); - } -} - class StatTimer { constructor(enable = true) { this.enabled = !!enable; @@ -420,7 +407,6 @@ export { addLinkAttributes, getFilenameFromUrl, LinkTarget, - getDefaultSetting, DEFAULT_LINK_REL, DOMCanvasFactory, DOMCMapReaderFactory, diff --git a/src/display/global.js b/src/display/global.js index 92f69c1b1..0941c431d 100644 --- a/src/display/global.js +++ b/src/display/global.js @@ -39,8 +39,6 @@ if (!globalScope.PDFJS) { } var PDFJS = globalScope.PDFJS; -PDFJS.pdfBug = false; - PDFJS.OPS = OPS; PDFJS.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; PDFJS.shadow = shadow; @@ -62,12 +60,6 @@ PDFJS.Util = Util; PDFJS.PageViewport = PageViewport; PDFJS.createPromiseCapability = createPromiseCapability; -/** - * Enables special hooks for debugging PDF.js. - * @var {boolean} - */ -PDFJS.pdfBug = (PDFJS.pdfBug === undefined ? false : PDFJS.pdfBug); - PDFJS.getDocument = getDocument; PDFJS.LoopbackPort = LoopbackPort; PDFJS.PDFDataRangeTransport = PDFDataRangeTransport; diff --git a/src/display/text_layer.js b/src/display/text_layer.js index 4362fa7b4..3bf75f584 100644 --- a/src/display/text_layer.js +++ b/src/display/text_layer.js @@ -14,7 +14,7 @@ */ import { AbortException, createPromiseCapability, Util } from '../shared/util'; -import { getDefaultSetting } from './dom_utils'; +import globalScope from '../shared/global_scope'; /** * Text layer render parameters. @@ -107,11 +107,9 @@ var renderTextLayer = (function renderTextLayerClosure() { textDiv.setAttribute('style', textDivProperties.style); textDiv.textContent = geom.str; - // |fontName| is only used by the Font Inspector. This test will succeed - // when e.g. the Font Inspector is off but the Stepper is on, but it's - // not worth the effort to do a more accurate test. We only use `dataset` - // here to make the font name available for the debugger. - if (getDefaultSetting('pdfBug')) { + // `fontName` is only used by the FontInspector, and we only use `dataset` + // here to make the font name available in the debugger. + if (task._fontInspectorEnabled) { textDiv.dataset.fontName = geom.fontName; } if (angle !== 0) { @@ -479,6 +477,8 @@ var renderTextLayer = (function renderTextLayerClosure() { this._textDivs = textDivs || []; this._textContentItemsStr = textContentItemsStr || []; this._enhanceTextSelection = !!enhanceTextSelection; + this._fontInspectorEnabled = !!(globalScope.FontInspector && + globalScope.FontInspector.enabled); this._reader = null; this._layoutTextLastFontSize = null; diff --git a/test/driver.js b/test/driver.js index 39bec1927..1206b912c 100644 --- a/test/driver.js +++ b/test/driver.js @@ -273,8 +273,6 @@ var Driver = (function DriverClosure() { // eslint-disable-line no-unused-vars // Configure the global worker options. PDFJS.GlobalWorkerOptions.workerSrc = WORKER_SRC; - PDFJS.pdfBug = true; - // Set the passed options this.inflight = options.inflight; this.disableScrolling = options.disableScrolling; @@ -368,6 +366,7 @@ var Driver = (function DriverClosure() { // eslint-disable-line no-unused-vars cMapPacked: CMAP_PACKED, disableRange: task.disableRange, disableAutoFetch: !task.enableAutoFetch, + pdfBug: true, }).then((doc) => { task.pdfDoc = doc; this._nextPage(task, failure); diff --git a/web/app.js b/web/app.js index 912287cd7..015723807 100644 --- a/web/app.js +++ b/web/app.js @@ -22,8 +22,8 @@ import { } from './ui_utils'; import { build, createBlob, getDocument, getFilenameFromUrl, GlobalWorkerOptions, - InvalidPDFException, LinkTarget, MissingPDFException, OPS, PDFJS, PDFWorker, - shadow, UnexpectedResponseException, UNSUPPORTED_FEATURES, version + InvalidPDFException, LinkTarget, MissingPDFException, OPS, PDFWorker, shadow, + UnexpectedResponseException, UNSUPPORTED_FEATURES, version } from 'pdfjs-lib'; import { CursorTool, PDFCursorTools } from './pdf_cursor_tools'; import { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue'; @@ -306,7 +306,7 @@ let PDFViewerApplication = { } } if ('pdfbug' in hashParams) { - PDFJS.pdfBug = true; + AppOptions.set('pdfBug', true); let enabled = hashParams['pdfbug'].split(','); waitOn.push(loadAndEnablePDFBug(enabled)); } @@ -2005,7 +2005,7 @@ function webViewerPageChanging(evt) { PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page); } - // we need to update stats + // We need to update stats. if (typeof Stats !== 'undefined' && Stats.enabled) { let pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1); if (pageView && pageView.stats) { diff --git a/web/app_options.js b/web/app_options.js index 70e11a850..c851c9a76 100644 --- a/web/app_options.js +++ b/web/app_options.js @@ -175,6 +175,11 @@ const defaultOptions = { value: -1, kind: OptionKind.API, }, + pdfBug: { + /** @type {boolean} */ + value: false, + kind: OptionKind.API, + }, postMessageTransfers: { /** @type {boolean} */ value: true,