|  | /** | 
|  | * @licstart The following is the entire license notice for the | 
|  | * Javascript code in this page | 
|  | * | 
|  | * Copyright 2020 Mozilla Foundation | 
|  | * | 
|  | * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | * you may not use this file except in compliance with the License. | 
|  | * You may obtain a copy of the License at | 
|  | * | 
|  | *     http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, software | 
|  | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | * See the License for the specific language governing permissions and | 
|  | * limitations under the License. | 
|  | * | 
|  | * @licend The above is the entire license notice for the | 
|  | * Javascript code in this page | 
|  | */ | 
|  | "use strict"; | 
|  |  | 
|  | Object.defineProperty(exports, "__esModule", { | 
|  | value: true | 
|  | }); | 
|  | exports.PDFRenderingQueue = exports.RenderingStates = void 0; | 
|  | const CLEANUP_TIMEOUT = 30000; | 
|  | const RenderingStates = { | 
|  | INITIAL: 0, | 
|  | RUNNING: 1, | 
|  | PAUSED: 2, | 
|  | FINISHED: 3 | 
|  | }; | 
|  | exports.RenderingStates = RenderingStates; | 
|  |  | 
|  | class PDFRenderingQueue { | 
|  | constructor() { | 
|  | this.pdfViewer = null; | 
|  | this.pdfThumbnailViewer = null; | 
|  | this.onIdle = null; | 
|  | this.highestPriorityPage = null; | 
|  | this.idleTimeout = null; | 
|  | this.printing = false; | 
|  | this.isThumbnailViewEnabled = false; | 
|  | } | 
|  |  | 
|  | setViewer(pdfViewer) { | 
|  | this.pdfViewer = pdfViewer; | 
|  | } | 
|  |  | 
|  | setThumbnailViewer(pdfThumbnailViewer) { | 
|  | this.pdfThumbnailViewer = pdfThumbnailViewer; | 
|  | } | 
|  |  | 
|  | isHighestPriority(view) { | 
|  | return this.highestPriorityPage === view.renderingId; | 
|  | } | 
|  |  | 
|  | renderHighestPriority(currentlyVisiblePages) { | 
|  | if (this.idleTimeout) { | 
|  | clearTimeout(this.idleTimeout); | 
|  | this.idleTimeout = null; | 
|  | } | 
|  |  | 
|  | if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { | 
|  | return; | 
|  | } | 
|  |  | 
|  | if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) { | 
|  | if (this.pdfThumbnailViewer.forceRendering()) { | 
|  | return; | 
|  | } | 
|  | } | 
|  |  | 
|  | if (this.printing) { | 
|  | return; | 
|  | } | 
|  |  | 
|  | if (this.onIdle) { | 
|  | this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); | 
|  | } | 
|  | } | 
|  |  | 
|  | getHighestPriority(visible, views, scrolledDown) { | 
|  | const visibleViews = visible.views; | 
|  | const numVisible = visibleViews.length; | 
|  |  | 
|  | if (numVisible === 0) { | 
|  | return null; | 
|  | } | 
|  |  | 
|  | for (let i = 0; i < numVisible; ++i) { | 
|  | const view = visibleViews[i].view; | 
|  |  | 
|  | if (!this.isViewFinished(view)) { | 
|  | return view; | 
|  | } | 
|  | } | 
|  |  | 
|  | if (scrolledDown) { | 
|  | const nextPageIndex = visible.last.id; | 
|  |  | 
|  | if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) { | 
|  | return views[nextPageIndex]; | 
|  | } | 
|  | } else { | 
|  | const previousPageIndex = visible.first.id - 2; | 
|  |  | 
|  | if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) { | 
|  | return views[previousPageIndex]; | 
|  | } | 
|  | } | 
|  |  | 
|  | return null; | 
|  | } | 
|  |  | 
|  | isViewFinished(view) { | 
|  | return view.renderingState === RenderingStates.FINISHED; | 
|  | } | 
|  |  | 
|  | renderView(view) { | 
|  | switch (view.renderingState) { | 
|  | case RenderingStates.FINISHED: | 
|  | return false; | 
|  |  | 
|  | case RenderingStates.PAUSED: | 
|  | this.highestPriorityPage = view.renderingId; | 
|  | view.resume(); | 
|  | break; | 
|  |  | 
|  | case RenderingStates.RUNNING: | 
|  | this.highestPriorityPage = view.renderingId; | 
|  | break; | 
|  |  | 
|  | case RenderingStates.INITIAL: | 
|  | this.highestPriorityPage = view.renderingId; | 
|  | view.draw().finally(() => { | 
|  | this.renderHighestPriority(); | 
|  | }).catch(reason => { | 
|  | console.error(`renderView: "${reason}"`); | 
|  | }); | 
|  | break; | 
|  | } | 
|  |  | 
|  | return true; | 
|  | } | 
|  |  | 
|  | } | 
|  |  | 
|  | exports.PDFRenderingQueue = PDFRenderingQueue; |