Merge pull request #8295 from Snuffleupagus/web-createPromiseCapability
Use `createPromiseCapability` in `/web` files and avoid unnecessary `PDFPageView.setPdfPage` calls
This commit is contained in:
commit
3eb51f1272
@ -138,7 +138,7 @@
|
|||||||
}],
|
}],
|
||||||
|
|
||||||
// ECMAScript 6
|
// ECMAScript 6
|
||||||
"arrow-body-style": ["error", "as-needed"],
|
"arrow-body-style": ["error", "always"],
|
||||||
"arrow-parens": ["error", "always"],
|
"arrow-parens": ["error", "always"],
|
||||||
"arrow-spacing": ["error", {
|
"arrow-spacing": ["error", {
|
||||||
"before": true,
|
"before": true,
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { getPDFFileNameFromURL, mozL10n } from './ui_utils';
|
import { getPDFFileNameFromURL, mozL10n } from './ui_utils';
|
||||||
|
import { createPromiseCapability } from './pdfjs';
|
||||||
import { OverlayManager } from './overlay_manager';
|
import { OverlayManager } from './overlay_manager';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,10 +45,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
|||||||
if (options.closeButton) {
|
if (options.closeButton) {
|
||||||
options.closeButton.addEventListener('click', this.close.bind(this));
|
options.closeButton.addEventListener('click', this.close.bind(this));
|
||||||
}
|
}
|
||||||
|
this._dataAvailableCapability = createPromiseCapability();
|
||||||
this.dataAvailablePromise = new Promise(function (resolve) {
|
|
||||||
this.resolveDataAvailable = resolve;
|
|
||||||
}.bind(this));
|
|
||||||
|
|
||||||
OverlayManager.register(this.overlayName, this.container,
|
OverlayManager.register(this.overlayName, this.container,
|
||||||
this.close.bind(this));
|
this.close.bind(this));
|
||||||
@ -59,9 +57,9 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
|||||||
*/
|
*/
|
||||||
open: function PDFDocumentProperties_open() {
|
open: function PDFDocumentProperties_open() {
|
||||||
Promise.all([OverlayManager.open(this.overlayName),
|
Promise.all([OverlayManager.open(this.overlayName),
|
||||||
this.dataAvailablePromise]).then(function () {
|
this._dataAvailableCapability.promise]).then(() => {
|
||||||
this._getProperties();
|
this._getProperties();
|
||||||
}.bind(this));
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -97,7 +95,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
|||||||
function PDFDocumentProperties_setDocumentAndUrl(pdfDocument, url) {
|
function PDFDocumentProperties_setDocumentAndUrl(pdfDocument, url) {
|
||||||
this.pdfDocument = pdfDocument;
|
this.pdfDocument = pdfDocument;
|
||||||
this.url = url;
|
this.url = url;
|
||||||
this.resolveDataAvailable();
|
this._dataAvailableCapability.resolve();
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -110,16 +108,16 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Get the file size (if it hasn't already been set).
|
// Get the file size (if it hasn't already been set).
|
||||||
this.pdfDocument.getDownloadInfo().then(function(data) {
|
this.pdfDocument.getDownloadInfo().then((data) => {
|
||||||
if (data.length === this.rawFileSize) {
|
if (data.length === this.rawFileSize) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.setFileSize(data.length);
|
this.setFileSize(data.length);
|
||||||
this._updateUI(this.fields['fileSize'], this._parseFileSize());
|
this._updateUI(this.fields['fileSize'], this._parseFileSize());
|
||||||
}.bind(this));
|
});
|
||||||
|
|
||||||
// Get the document properties.
|
// Get the document properties.
|
||||||
this.pdfDocument.getMetadata().then(function(data) {
|
this.pdfDocument.getMetadata().then((data) => {
|
||||||
var content = {
|
var content = {
|
||||||
'fileName': getPDFFileNameFromURL(this.url),
|
'fileName': getPDFFileNameFromURL(this.url),
|
||||||
'fileSize': this._parseFileSize(),
|
'fileSize': this._parseFileSize(),
|
||||||
@ -139,7 +137,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
|
|||||||
for (var identifier in content) {
|
for (var identifier in content) {
|
||||||
this._updateUI(this.fields[identifier], content[identifier]);
|
this._updateUI(this.fields[identifier], content[identifier]);
|
||||||
}
|
}
|
||||||
}.bind(this));
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -81,9 +81,9 @@ var PDFFindController = (function PDFFindControllerClosure() {
|
|||||||
this.dirtyMatch = false;
|
this.dirtyMatch = false;
|
||||||
this.findTimeout = null;
|
this.findTimeout = null;
|
||||||
|
|
||||||
this.firstPagePromise = new Promise(function (resolve) {
|
this._firstPagePromise = new Promise((resolve) => {
|
||||||
this.resolveFirstPage = resolve;
|
this.resolveFirstPage = resolve;
|
||||||
}.bind(this));
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
normalize: function PDFFindController_normalize(text) {
|
normalize: function PDFFindController_normalize(text) {
|
||||||
@ -277,7 +277,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
|
|||||||
this.state = state;
|
this.state = state;
|
||||||
this.updateUIState(FindStates.FIND_PENDING);
|
this.updateUIState(FindStates.FIND_PENDING);
|
||||||
|
|
||||||
this.firstPagePromise.then(function() {
|
this._firstPagePromise.then(function() {
|
||||||
this.extractText();
|
this.extractText();
|
||||||
|
|
||||||
clearTimeout(this.findTimeout);
|
clearTimeout(this.findTimeout);
|
||||||
|
@ -18,7 +18,8 @@ import {
|
|||||||
roundToDivide
|
roundToDivide
|
||||||
} from './ui_utils';
|
} from './ui_utils';
|
||||||
import {
|
import {
|
||||||
CustomStyle, PDFJS, RenderingCancelledException, SVGGraphics
|
createPromiseCapability, CustomStyle, PDFJS, RenderingCancelledException,
|
||||||
|
SVGGraphics
|
||||||
} from './pdfjs';
|
} from './pdfjs';
|
||||||
import { domEvents } from './dom_events';
|
import { domEvents } from './dom_events';
|
||||||
import { RenderingStates } from './pdf_rendering_queue';
|
import { RenderingStates } from './pdf_rendering_queue';
|
||||||
@ -493,14 +494,10 @@ var PDFPageView = (function PDFPageViewClosure() {
|
|||||||
},
|
},
|
||||||
|
|
||||||
paintOnCanvas: function (canvasWrapper) {
|
paintOnCanvas: function (canvasWrapper) {
|
||||||
var resolveRenderPromise, rejectRenderPromise;
|
var renderCapability = createPromiseCapability();
|
||||||
var promise = new Promise(function (resolve, reject) {
|
|
||||||
resolveRenderPromise = resolve;
|
|
||||||
rejectRenderPromise = reject;
|
|
||||||
});
|
|
||||||
|
|
||||||
var result = {
|
var result = {
|
||||||
promise: promise,
|
promise: renderCapability.promise,
|
||||||
onRenderContinue: function (cont) {
|
onRenderContinue: function (cont) {
|
||||||
cont();
|
cont();
|
||||||
},
|
},
|
||||||
@ -589,11 +586,11 @@ var PDFPageView = (function PDFPageViewClosure() {
|
|||||||
renderTask.promise.then(
|
renderTask.promise.then(
|
||||||
function pdfPageRenderCallback() {
|
function pdfPageRenderCallback() {
|
||||||
showCanvas();
|
showCanvas();
|
||||||
resolveRenderPromise(undefined);
|
renderCapability.resolve(undefined);
|
||||||
},
|
},
|
||||||
function pdfPageRenderError(error) {
|
function pdfPageRenderError(error) {
|
||||||
showCanvas();
|
showCanvas();
|
||||||
rejectRenderPromise(error);
|
renderCapability.reject(error);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { createPromiseCapability, RenderingCancelledException } from './pdfjs';
|
||||||
import { getOutputScale, mozL10n } from './ui_utils';
|
import { getOutputScale, mozL10n } from './ui_utils';
|
||||||
import { RenderingCancelledException } from './pdfjs';
|
|
||||||
import { RenderingStates } from './pdf_rendering_queue';
|
import { RenderingStates } from './pdf_rendering_queue';
|
||||||
|
|
||||||
var THUMBNAIL_WIDTH = 98; // px
|
var THUMBNAIL_WIDTH = 98; // px
|
||||||
@ -275,11 +275,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
|||||||
|
|
||||||
this.renderingState = RenderingStates.RUNNING;
|
this.renderingState = RenderingStates.RUNNING;
|
||||||
|
|
||||||
var resolveRenderPromise, rejectRenderPromise;
|
var renderCapability = createPromiseCapability();
|
||||||
var promise = new Promise(function (resolve, reject) {
|
|
||||||
resolveRenderPromise = resolve;
|
|
||||||
rejectRenderPromise = reject;
|
|
||||||
});
|
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
function thumbnailDrawCallback(error) {
|
function thumbnailDrawCallback(error) {
|
||||||
@ -293,7 +289,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
|||||||
if (((typeof PDFJSDev === 'undefined' ||
|
if (((typeof PDFJSDev === 'undefined' ||
|
||||||
!PDFJSDev.test('PDFJS_NEXT')) && error === 'cancelled') ||
|
!PDFJSDev.test('PDFJS_NEXT')) && error === 'cancelled') ||
|
||||||
error instanceof RenderingCancelledException) {
|
error instanceof RenderingCancelledException) {
|
||||||
resolveRenderPromise(undefined);
|
renderCapability.resolve(undefined);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,9 +297,9 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
|||||||
self._convertCanvasToImage();
|
self._convertCanvasToImage();
|
||||||
|
|
||||||
if (!error) {
|
if (!error) {
|
||||||
resolveRenderPromise(undefined);
|
renderCapability.resolve(undefined);
|
||||||
} else {
|
} else {
|
||||||
rejectRenderPromise(error);
|
renderCapability.reject(error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -336,7 +332,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
|
|||||||
thumbnailDrawCallback(error);
|
thumbnailDrawCallback(error);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
return promise;
|
return renderCapability.promise;
|
||||||
},
|
},
|
||||||
|
|
||||||
setImage: function PDFThumbnailView_setImage(pageView) {
|
setImage: function PDFThumbnailView_setImage(pageView) {
|
||||||
|
@ -13,17 +13,15 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { createPromiseCapability, PDFJS } from './pdfjs';
|
||||||
import {
|
import {
|
||||||
CSS_UNITS, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, getVisibleElements,
|
CSS_UNITS, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, getVisibleElements,
|
||||||
MAX_AUTO_SCALE, RendererType, SCROLLBAR_PADDING, scrollIntoView,
|
MAX_AUTO_SCALE, RendererType, SCROLLBAR_PADDING, scrollIntoView,
|
||||||
UNKNOWN_SCALE, VERTICAL_PADDING, watchScroll
|
UNKNOWN_SCALE, VERTICAL_PADDING, watchScroll
|
||||||
} from './ui_utils';
|
} from './ui_utils';
|
||||||
import {
|
import { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue';
|
||||||
PDFRenderingQueue, RenderingStates,
|
|
||||||
} from './pdf_rendering_queue';
|
|
||||||
import { AnnotationLayerBuilder } from './annotation_layer_builder';
|
import { AnnotationLayerBuilder } from './annotation_layer_builder';
|
||||||
import { domEvents } from './dom_events';
|
import { domEvents } from './dom_events';
|
||||||
import { PDFJS } from './pdfjs';
|
|
||||||
import { PDFPageView } from './pdf_page_view';
|
import { PDFPageView } from './pdf_page_view';
|
||||||
import { SimpleLinkService } from './pdf_link_service';
|
import { SimpleLinkService } from './pdf_link_service';
|
||||||
import { TextLayerBuilder } from './text_layer_builder';
|
import { TextLayerBuilder } from './text_layer_builder';
|
||||||
@ -313,41 +311,34 @@ var PDFViewer = (function pdfViewer() {
|
|||||||
if (!pdfDocument) {
|
if (!pdfDocument) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var pagesCount = pdfDocument.numPages;
|
var pagesCount = pdfDocument.numPages;
|
||||||
var self = this;
|
|
||||||
|
|
||||||
var resolvePagesPromise;
|
var pagesCapability = createPromiseCapability();
|
||||||
var pagesPromise = new Promise(function (resolve) {
|
this.pagesPromise = pagesCapability.promise;
|
||||||
resolvePagesPromise = resolve;
|
|
||||||
});
|
pagesCapability.promise.then(() => {
|
||||||
this.pagesPromise = pagesPromise;
|
this._pageViewsReady = true;
|
||||||
pagesPromise.then(function () {
|
this.eventBus.dispatch('pagesloaded', {
|
||||||
self._pageViewsReady = true;
|
source: this,
|
||||||
self.eventBus.dispatch('pagesloaded', {
|
pagesCount,
|
||||||
source: self,
|
|
||||||
pagesCount: pagesCount
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
var isOnePageRenderedResolved = false;
|
var isOnePageRenderedResolved = false;
|
||||||
var resolveOnePageRendered = null;
|
var onePageRenderedCapability = createPromiseCapability();
|
||||||
var onePageRendered = new Promise(function (resolve) {
|
this.onePageRendered = onePageRenderedCapability.promise;
|
||||||
resolveOnePageRendered = resolve;
|
|
||||||
});
|
|
||||||
this.onePageRendered = onePageRendered;
|
|
||||||
|
|
||||||
var bindOnAfterAndBeforeDraw = function (pageView) {
|
var bindOnAfterAndBeforeDraw = (pageView) => {
|
||||||
pageView.onBeforeDraw = function pdfViewLoadOnBeforeDraw() {
|
pageView.onBeforeDraw = () => {
|
||||||
// Add the page to the buffer at the start of drawing. That way it can
|
// Add the page to the buffer at the start of drawing. That way it can
|
||||||
// be evicted from the buffer and destroyed even if we pause its
|
// be evicted from the buffer and destroyed even if we pause its
|
||||||
// rendering.
|
// rendering.
|
||||||
self._buffer.push(this);
|
this._buffer.push(pageView);
|
||||||
};
|
};
|
||||||
pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() {
|
pageView.onAfterDraw = () => {
|
||||||
if (!isOnePageRenderedResolved) {
|
if (!isOnePageRenderedResolved) {
|
||||||
isOnePageRenderedResolved = true;
|
isOnePageRenderedResolved = true;
|
||||||
resolveOnePageRendered();
|
onePageRenderedCapability.resolve();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -357,7 +348,7 @@ var PDFViewer = (function pdfViewer() {
|
|||||||
|
|
||||||
// Fetch a single page so we can get a viewport that will be the default
|
// Fetch a single page so we can get a viewport that will be the default
|
||||||
// viewport for all pages
|
// viewport for all pages
|
||||||
return firstPagePromise.then(function(pdfPage) {
|
return firstPagePromise.then((pdfPage) => {
|
||||||
var scale = this.currentScale;
|
var scale = this.currentScale;
|
||||||
var viewport = pdfPage.getViewport(scale * CSS_UNITS);
|
var viewport = pdfPage.getViewport(scale * CSS_UNITS);
|
||||||
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
|
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
|
||||||
@ -382,34 +373,31 @@ var PDFViewer = (function pdfViewer() {
|
|||||||
this._pages.push(pageView);
|
this._pages.push(pageView);
|
||||||
}
|
}
|
||||||
|
|
||||||
var linkService = this.linkService;
|
|
||||||
|
|
||||||
// Fetch all the pages since the viewport is needed before printing
|
// Fetch all the pages since the viewport is needed before printing
|
||||||
// starts to create the correct size canvas. Wait until one page is
|
// starts to create the correct size canvas. Wait until one page is
|
||||||
// rendered so we don't tie up too many resources early on.
|
// rendered so we don't tie up too many resources early on.
|
||||||
onePageRendered.then(function () {
|
onePageRenderedCapability.promise.then(() => {
|
||||||
if (!PDFJS.disableAutoFetch) {
|
if (PDFJS.disableAutoFetch) {
|
||||||
var getPagesLeft = pagesCount;
|
|
||||||
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
|
|
||||||
pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) {
|
|
||||||
var pageView = self._pages[pageNum - 1];
|
|
||||||
if (!pageView.pdfPage) {
|
|
||||||
pageView.setPdfPage(pdfPage);
|
|
||||||
}
|
|
||||||
linkService.cachePageRef(pageNum, pdfPage.ref);
|
|
||||||
getPagesLeft--;
|
|
||||||
if (!getPagesLeft) {
|
|
||||||
resolvePagesPromise();
|
|
||||||
}
|
|
||||||
}.bind(null, pageNum));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// XXX: Printing is semi-broken with auto fetch disabled.
|
// XXX: Printing is semi-broken with auto fetch disabled.
|
||||||
resolvePagesPromise();
|
pagesCapability.resolve();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var getPagesLeft = pagesCount;
|
||||||
|
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
|
||||||
|
pdfDocument.getPage(pageNum).then(function(pageNum, pdfPage) {
|
||||||
|
var pageView = this._pages[pageNum - 1];
|
||||||
|
if (!pageView.pdfPage) {
|
||||||
|
pageView.setPdfPage(pdfPage);
|
||||||
|
}
|
||||||
|
this.linkService.cachePageRef(pageNum, pdfPage.ref);
|
||||||
|
if (--getPagesLeft === 0) {
|
||||||
|
pagesCapability.resolve();
|
||||||
|
}
|
||||||
|
}.bind(this, pageNum));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
self.eventBus.dispatch('pagesinit', {source: self});
|
this.eventBus.dispatch('pagesinit', { source: this });
|
||||||
|
|
||||||
if (this.defaultRenderingQueue) {
|
if (this.defaultRenderingQueue) {
|
||||||
this.update();
|
this.update();
|
||||||
@ -418,7 +406,7 @@ var PDFViewer = (function pdfViewer() {
|
|||||||
if (this.findController) {
|
if (this.findController) {
|
||||||
this.findController.resolveFirstPage();
|
this.findController.resolveFirstPage();
|
||||||
}
|
}
|
||||||
}.bind(this));
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -855,12 +843,13 @@ var PDFViewer = (function pdfViewer() {
|
|||||||
if (this._pagesRequests[pageNumber]) {
|
if (this._pagesRequests[pageNumber]) {
|
||||||
return this._pagesRequests[pageNumber];
|
return this._pagesRequests[pageNumber];
|
||||||
}
|
}
|
||||||
var promise = this.pdfDocument.getPage(pageNumber).then(
|
var promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => {
|
||||||
function (pdfPage) {
|
if (!pageView.pdfPage) {
|
||||||
pageView.setPdfPage(pdfPage);
|
pageView.setPdfPage(pdfPage);
|
||||||
|
}
|
||||||
this._pagesRequests[pageNumber] = null;
|
this._pagesRequests[pageNumber] = null;
|
||||||
return pdfPage;
|
return pdfPage;
|
||||||
}.bind(this));
|
});
|
||||||
this._pagesRequests[pageNumber] = promise;
|
this._pagesRequests[pageNumber] = promise;
|
||||||
return promise;
|
return promise;
|
||||||
},
|
},
|
||||||
@ -871,9 +860,9 @@ var PDFViewer = (function pdfViewer() {
|
|||||||
this._pages,
|
this._pages,
|
||||||
this.scroll.down);
|
this.scroll.down);
|
||||||
if (pageView) {
|
if (pageView) {
|
||||||
this._ensurePdfPageLoaded(pageView).then(function () {
|
this._ensurePdfPageLoaded(pageView).then(() => {
|
||||||
this.renderingQueue.renderView(pageView);
|
this.renderingQueue.renderView(pageView);
|
||||||
}.bind(this));
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user