diff --git a/browser/extensions/pdfjs/README.mozilla b/browser/extensions/pdfjs/README.mozilla index f9123c465736..4ca6510c4357 100644 --- a/browser/extensions/pdfjs/README.mozilla +++ b/browser/extensions/pdfjs/README.mozilla @@ -1,5 +1,5 @@ This is the PDF.js project output, https://github.com/mozilla/pdf.js -Current extension version is: 2.0.602 +Current extension version is: 2.0.625 -Taken from upstream commit: 3b07147d +Taken from upstream commit: e8b50883 diff --git a/browser/extensions/pdfjs/content/build/pdf.js b/browser/extensions/pdfjs/content/build/pdf.js index d7c6d79d6145..b69b95e9cd7f 100644 --- a/browser/extensions/pdfjs/content/build/pdf.js +++ b/browser/extensions/pdfjs/content/build/pdf.js @@ -123,8 +123,8 @@ return /******/ (function(modules) { // webpackBootstrap "use strict"; -var pdfjsVersion = '2.0.602'; -var pdfjsBuild = '3b07147d'; +var pdfjsVersion = '2.0.625'; +var pdfjsBuild = 'e8b50883'; var pdfjsSharedUtil = __w_pdfjs_require__(1); var pdfjsDisplayAPI = __w_pdfjs_require__(6); var pdfjsDisplayTextLayer = __w_pdfjs_require__(18); @@ -825,11 +825,6 @@ var Util = function UtilClosure() { var romanStr = romanBuf.join(''); return lowerCase ? romanStr.toLowerCase() : romanStr; }; - Util.extendObj = function extendObj(obj1, obj2) { - for (var key in obj2) { - obj1[key] = obj2[key]; - } - }; Util.inherit = function Util_inherit(sub, base, prototype) { sub.prototype = Object.create(base.prototype); sub.prototype.constructor = sub; @@ -4155,10 +4150,10 @@ function getDocument(src) { params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false; } if (typeof params.disableRange !== 'boolean') { - params.disableRange = _api_compatibility.apiCompatibilityParams.disableRange || false; + params.disableRange = false; } if (typeof params.disableStream !== 'boolean') { - params.disableStream = _api_compatibility.apiCompatibilityParams.disableStream || false; + params.disableStream = false; } if (typeof params.disableAutoFetch !== 'boolean') { params.disableAutoFetch = false; @@ -4228,7 +4223,7 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { } return worker.messageHandler.sendWithPromise('GetDocRequest', { docId, - apiVersion: '2.0.602', + apiVersion: '2.0.625', source: { data: source.data, url: source.url, @@ -4565,7 +4560,7 @@ var PDFPageProxy = function PDFPageProxyClosure() { resolve(textContent); return; } - _util.Util.extendObj(textContent.styles, value.styles); + Object.assign(textContent.styles, value.styles); textContent.items.push(...value.items); pump(); }, reject); @@ -5362,8 +5357,6 @@ var WorkerTransport = function WorkerTransportClosure() { get loadingParams() { let params = this._params; return (0, _util.shadow)(this, 'loadingParams', { - disableRange: params.disableRange, - disableStream: params.disableStream, disableAutoFetch: params.disableAutoFetch, disableCreateObjectURL: params.disableCreateObjectURL, disableFontFace: params.disableFontFace, @@ -5569,8 +5562,8 @@ var InternalRenderTask = function InternalRenderTaskClosure() { }(); var version, build; { - exports.version = version = '2.0.602'; - exports.build = build = '3b07147d'; + exports.version = version = '2.0.625'; + exports.build = build = 'e8b50883'; } exports.getDocument = getDocument; exports.LoopbackPort = LoopbackPort; @@ -10067,7 +10060,7 @@ var renderTextLayer = function renderTextLayerClosure() { capability.resolve(); return; } - _util.Util.extendObj(styleCache, value.styles); + Object.assign(styleCache, value.styles); this._processItems(value.items, styleCache); pump(); }, capability.reject); diff --git a/browser/extensions/pdfjs/content/build/pdf.worker.js b/browser/extensions/pdfjs/content/build/pdf.worker.js index 0a333ad89ab9..bad92125c9c2 100644 --- a/browser/extensions/pdfjs/content/build/pdf.worker.js +++ b/browser/extensions/pdfjs/content/build/pdf.worker.js @@ -123,8 +123,8 @@ return /******/ (function(modules) { // webpackBootstrap "use strict"; -var pdfjsVersion = '2.0.602'; -var pdfjsBuild = '3b07147d'; +var pdfjsVersion = '2.0.625'; +var pdfjsBuild = 'e8b50883'; var pdfjsCoreWorker = __w_pdfjs_require__(1); exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler; @@ -327,7 +327,7 @@ var WorkerMessageHandler = { var cancelXHRs = null; var WorkerTasks = []; let apiVersion = docParams.apiVersion; - let workerVersion = '2.0.602'; + let workerVersion = '2.0.625'; if (apiVersion !== workerVersion) { throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`); } @@ -1364,11 +1364,6 @@ var Util = function UtilClosure() { var romanStr = romanBuf.join(''); return lowerCase ? romanStr.toLowerCase() : romanStr; }; - Util.extendObj = function extendObj(obj1, obj2) { - for (var key in obj2) { - obj1[key] = obj2[key]; - } - }; Util.inherit = function Util_inherit(sub, base, prototype) { sub.prototype = Object.create(base.prototype); sub.prototype.constructor = sub; @@ -6466,14 +6461,36 @@ var XRef = function XRefClosure() { } trailerDict.assignXref(this); this.trailer = trailerDict; - var encrypt = trailerDict.get('Encrypt'); + let encrypt; + try { + encrypt = trailerDict.get('Encrypt'); + } catch (ex) { + if (ex instanceof _util.MissingDataException) { + throw ex; + } + (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`); + } if ((0, _primitives.isDict)(encrypt)) { var ids = trailerDict.get('ID'); var fileId = ids && ids.length ? ids[0] : ''; encrypt.suppressEncryption = true; this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password); } - if (!(this.root = trailerDict.get('Root'))) { + let root; + try { + root = trailerDict.get('Root'); + } catch (ex) { + if (ex instanceof _util.MissingDataException) { + throw ex; + } + (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`); + } + if ((0, _primitives.isDict)(root) && root.has('Pages')) { + this.root = root; + } else { + if (!recoveryMode) { + throw new _util.XRefParseException(); + } throw new _util.FormatError('Invalid root reference'); } }, @@ -6734,7 +6751,7 @@ var XRef = function XRefClosure() { break; } } - startPos += contentLength; + startPos = endPos; } let content = buffer.subarray(position, position + contentLength); var xrefTagOffset = skipUntil(content, 0, xrefBytes); @@ -6755,7 +6772,7 @@ var XRef = function XRefClosure() { this.startXRefQueue.push(xrefStms[i]); this.readXRef(true); } - var dict; + let trailerDict; for (i = 0, ii = trailers.length; i < ii; ++i) { stream.pos = trailers[i]; var parser = new _parser.Parser(new _parser.Lexer(stream), true, this, true); @@ -6763,16 +6780,29 @@ var XRef = function XRefClosure() { if (!(0, _primitives.isCmd)(obj, 'trailer')) { continue; } - dict = parser.getObj(); + let dict = parser.getObj(); if (!(0, _primitives.isDict)(dict)) { continue; } + let rootDict; + try { + rootDict = dict.get('Root'); + } catch (ex) { + if (ex instanceof _util.MissingDataException) { + throw ex; + } + continue; + } + if (!(0, _primitives.isDict)(rootDict) || !rootDict.has('Pages')) { + continue; + } if (dict.has('ID')) { return dict; } + trailerDict = dict; } - if (dict) { - return dict; + if (trailerDict) { + return trailerDict; } throw new _util.InvalidPDFException('Invalid PDF structure'); }, @@ -8115,7 +8145,7 @@ var Lexer = function LexerClosure() { var ch = this.currentChar; var eNotation = false; var divideBy = 0; - var sign = 1; + var sign = 0; if (ch === 0x2D) { sign = -1; ch = this.nextChar(); @@ -8123,10 +8153,7 @@ var Lexer = function LexerClosure() { ch = this.nextChar(); } } else if (ch === 0x2B) { - ch = this.nextChar(); - } - if (ch === 0x2E) { - divideBy = 10; + sign = 1; ch = this.nextChar(); } if (ch === 0x0A || ch === 0x0D) { @@ -8134,9 +8161,18 @@ var Lexer = function LexerClosure() { ch = this.nextChar(); } while (ch === 0x0A || ch === 0x0D); } + if (ch === 0x2E) { + divideBy = 10; + ch = this.nextChar(); + } if (ch < 0x30 || ch > 0x39) { + if (divideBy === 10 && sign === 0 && ((0, _util.isSpace)(ch) || ch === -1)) { + (0, _util.warn)('Lexer.getNumber - treating a single decimal point as zero.'); + return 0; + } throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`); } + sign = sign || 1; var baseValue = ch - 0x30; var powerValue = 0; var powerValueSign = 1; @@ -18802,7 +18838,7 @@ var OperatorList = function OperatorListClosure() { } }, addOpList(opList) { - _util.Util.extendObj(this.dependencies, opList.dependencies); + Object.assign(this.dependencies, opList.dependencies); for (var i = 0, ii = opList.length; i < ii; i++) { this.addOp(opList.fnArray[i], opList.argsArray[i]); } diff --git a/browser/extensions/pdfjs/content/web/viewer.js b/browser/extensions/pdfjs/content/web/viewer.js index 5d0028bcd95c..6fb54dce3508 100644 --- a/browser/extensions/pdfjs/content/web/viewer.js +++ b/browser/extensions/pdfjs/content/web/viewer.js @@ -3206,10 +3206,6 @@ const defaultOptions = { value: './images/', kind: OptionKind.VIEWER }, - locale: { - value: typeof navigator !== 'undefined' ? navigator.language : 'en-US', - kind: OptionKind.VIEWER - }, maxCanvasPixels: { value: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216, kind: OptionKind.VIEWER @@ -3263,11 +3259,11 @@ const defaultOptions = { kind: OptionKind.API }, disableRange: { - value: _pdfjsLib.apiCompatibilityParams.disableRange || false, + value: false, kind: OptionKind.API }, disableStream: { - value: _pdfjsLib.apiCompatibilityParams.disableStream || false, + value: false, kind: OptionKind.API }, isEvalSupported: { @@ -3299,6 +3295,7 @@ const defaultOptions = { kind: OptionKind.WORKER } }; +; const userOptions = Object.create(null); class AppOptions { constructor() { @@ -6349,7 +6346,7 @@ class PDFViewer extends _base_viewer.BaseViewer { return (0, _pdfjsLib.shadow)(this, '_setDocumentViewerElement', this.viewer); } _scrollIntoView({ pageDiv, pageSpot = null }) { - if (!pageSpot) { + if (!pageSpot && !this.isInPresentationMode) { const left = pageDiv.offsetLeft + pageDiv.clientLeft; const right = left + pageDiv.clientWidth; const { scrollLeft, clientWidth } = this.container; @@ -6410,15 +6407,57 @@ class PDFViewer extends _base_viewer.BaseViewer { location: this._location }); } - _regroupSpreads() { - const container = this._setDocumentViewerElement, - pages = this._pages; - while (container.firstChild) { - container.firstChild.remove(); + get _isScrollModeHorizontal() { + return this.isInPresentationMode ? false : this.scrollMode === _base_viewer.ScrollMode.HORIZONTAL; + } + setScrollMode(mode) { + if (mode === this.scrollMode) { + return; } + super.setScrollMode(mode); + this.eventBus.dispatch('scrollmodechanged', { mode }); + this._updateScrollModeClasses(); + if (!this.pdfDocument) { + return; + } + const pageNumber = this._currentPageNumber; + if (isNaN(this._currentScaleValue)) { + this._setScale(this._currentScaleValue, true); + } + this.scrollPageIntoView({ pageNumber }); + this.update(); + } + _updateScrollModeClasses() { + const { scrollMode, viewer } = this; + if (scrollMode === _base_viewer.ScrollMode.HORIZONTAL) { + viewer.classList.add('scrollHorizontal'); + } else { + viewer.classList.remove('scrollHorizontal'); + } + if (scrollMode === _base_viewer.ScrollMode.WRAPPED) { + viewer.classList.add('scrollWrapped'); + } else { + viewer.classList.remove('scrollWrapped'); + } + } + setSpreadMode(mode) { + if (mode === this.spreadMode) { + return; + } + super.setSpreadMode(mode); + this.eventBus.dispatch('spreadmodechanged', { mode }); + this._regroupSpreads(); + } + _regroupSpreads() { + if (!this.pdfDocument) { + return; + } + const viewer = this.viewer, + pages = this._pages; + viewer.textContent = ''; if (this.spreadMode === _base_viewer.SpreadMode.NONE) { for (let i = 0, iMax = pages.length; i < iMax; ++i) { - container.appendChild(pages[i].div); + viewer.appendChild(pages[i].div); } } else { const parity = this.spreadMode - 1; @@ -6427,10 +6466,10 @@ class PDFViewer extends _base_viewer.BaseViewer { if (spread === null) { spread = document.createElement('div'); spread.className = 'spread'; - container.appendChild(spread); + viewer.appendChild(spread); } else if (i % 2 === parity) { spread = spread.cloneNode(false); - container.appendChild(spread); + viewer.appendChild(spread); } spread.appendChild(pages[i].div); } @@ -6554,7 +6593,9 @@ class BaseViewer { if (this.removePageBorders) { this.viewer.classList.add('removePageBorders'); } - this._updateScrollModeClasses(); + if (this.scrollMode !== ScrollMode.VERTICAL) { + this._updateScrollModeClasses(); + } } get pagesCount() { return this._pages.length; @@ -6858,9 +6899,10 @@ class BaseViewer { if (!currentPage) { return; } - let hPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING; - let vPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING; - if (this.scrollMode === ScrollMode.HORIZONTAL) { + const noPadding = this.isInPresentationMode || this.removePageBorders; + let hPadding = noPadding ? 0 : _ui_utils.SCROLLBAR_PADDING; + let vPadding = noPadding ? 0 : _ui_utils.VERTICAL_PADDING; + if (!noPadding && this._isScrollModeHorizontal) { const temp = hPadding; hPadding = vPadding; vPadding = temp; @@ -7030,6 +7072,9 @@ class BaseViewer { focus() { this.container.focus(); } + get _isScrollModeHorizontal() { + throw new Error('Not implemented: _isScrollModeHorizontal'); + } get isInPresentationMode() { return this.presentationModeState === _ui_utils.PresentationModeState.FULLSCREEN; } @@ -7082,7 +7127,7 @@ class BaseViewer { } forceRendering(currentlyVisiblePages) { let visiblePages = currentlyVisiblePages || this._getVisiblePages(); - let scrollAhead = this.scrollMode === ScrollMode.HORIZONTAL ? this.scroll.right : this.scroll.down; + let scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down; let pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, scrollAhead); if (pageView) { this._ensurePdfPageLoaded(pageView).then(() => { @@ -7156,30 +7201,17 @@ class BaseViewer { }); } setScrollMode(mode) { - if (mode !== this.scrollMode) { - this.scrollMode = mode; - this._updateScrollModeClasses(); - this.eventBus.dispatch('scrollmodechanged', { mode }); - const pageNumber = this._currentPageNumber; - if (isNaN(this._currentScaleValue)) { - this._setScale(this._currentScaleValue, this.isInPresentationMode); - } - this.scrollPageIntoView({ pageNumber }); - this.update(); + if (!Number.isInteger(mode) || !Object.values(ScrollMode).includes(mode)) { + throw new Error(`Invalid scroll mode: ${mode}`); } + this.scrollMode = mode; } - _updateScrollModeClasses() { - const mode = this.scrollMode, - { classList } = this.viewer; - classList.toggle('scrollHorizontal', mode === ScrollMode.HORIZONTAL); - classList.toggle('scrollWrapped', mode === ScrollMode.WRAPPED); - } + _updateScrollModeClasses() {} setSpreadMode(mode) { - if (mode !== this.spreadMode) { - this.spreadMode = mode; - this.eventBus.dispatch('spreadmodechanged', { mode }); - this._regroupSpreads(); + if (!Number.isInteger(mode) || !Object.values(SpreadMode).includes(mode)) { + throw new Error(`Invalid spread mode: ${mode}`); } + this.spreadMode = mode; } _regroupSpreads() {} } @@ -8176,16 +8208,38 @@ class SecondaryToolbar { } _bindScrollModeListener(buttons) { this.eventBus.on('scrollmodechanged', function (evt) { - buttons.scrollVerticalButton.classList.toggle('toggled', evt.mode === _base_viewer.ScrollMode.VERTICAL); - buttons.scrollHorizontalButton.classList.toggle('toggled', evt.mode === _base_viewer.ScrollMode.HORIZONTAL); - buttons.scrollWrappedButton.classList.toggle('toggled', evt.mode === _base_viewer.ScrollMode.WRAPPED); + buttons.scrollVerticalButton.classList.remove('toggled'); + buttons.scrollHorizontalButton.classList.remove('toggled'); + buttons.scrollWrappedButton.classList.remove('toggled'); + switch (evt.mode) { + case _base_viewer.ScrollMode.VERTICAL: + buttons.scrollVerticalButton.classList.add('toggled'); + break; + case _base_viewer.ScrollMode.HORIZONTAL: + buttons.scrollHorizontalButton.classList.add('toggled'); + break; + case _base_viewer.ScrollMode.WRAPPED: + buttons.scrollWrappedButton.classList.add('toggled'); + break; + } }); } _bindSpreadModeListener(buttons) { this.eventBus.on('spreadmodechanged', function (evt) { - buttons.spreadNoneButton.classList.toggle('toggled', evt.mode === _base_viewer.SpreadMode.NONE); - buttons.spreadOddButton.classList.toggle('toggled', evt.mode === _base_viewer.SpreadMode.ODD); - buttons.spreadEvenButton.classList.toggle('toggled', evt.mode === _base_viewer.SpreadMode.EVEN); + buttons.spreadNoneButton.classList.remove('toggled'); + buttons.spreadOddButton.classList.remove('toggled'); + buttons.spreadEvenButton.classList.remove('toggled'); + switch (evt.mode) { + case _base_viewer.SpreadMode.NONE: + buttons.spreadNoneButton.classList.add('toggled'); + break; + case _base_viewer.SpreadMode.ODD: + buttons.spreadOddButton.classList.add('toggled'); + break; + case _base_viewer.SpreadMode.EVEN: + buttons.spreadEvenButton.classList.add('toggled'); + break; + } }); } open() {