Use createPromiseCapability in /web files

In various viewer files, there's a number of cases where we basically duplicate the functionality of `createPromiseCapability` manually.
As far as I can tell, a couple of these cases have existed for a very long time, and notable even before the `createPromiseCapability` utility function existed.

Also, since we can write ES6 code now, the patch also replaces a couple of `bind` usages with arrow functions in code that's touched in the patch.
This commit is contained in:
Jonas Jenwald 2017-04-15 12:57:54 +02:00
parent c6e8ca863e
commit b0a4f6de8f
6 changed files with 62 additions and 83 deletions

View File

@ -138,7 +138,7 @@
}],
// ECMAScript 6
"arrow-body-style": ["error", "as-needed"],
"arrow-body-style": ["error", "always"],
"arrow-parens": ["error", "always"],
"arrow-spacing": ["error", {
"before": true,

View File

@ -14,6 +14,7 @@
*/
import { getPDFFileNameFromURL, mozL10n } from './ui_utils';
import { createPromiseCapability } from './pdfjs';
import { OverlayManager } from './overlay_manager';
/**
@ -44,10 +45,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
if (options.closeButton) {
options.closeButton.addEventListener('click', this.close.bind(this));
}
this.dataAvailablePromise = new Promise(function (resolve) {
this.resolveDataAvailable = resolve;
}.bind(this));
this._dataAvailableCapability = createPromiseCapability();
OverlayManager.register(this.overlayName, this.container,
this.close.bind(this));
@ -59,9 +57,9 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
*/
open: function PDFDocumentProperties_open() {
Promise.all([OverlayManager.open(this.overlayName),
this.dataAvailablePromise]).then(function () {
this._dataAvailableCapability.promise]).then(() => {
this._getProperties();
}.bind(this));
});
},
/**
@ -97,7 +95,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
function PDFDocumentProperties_setDocumentAndUrl(pdfDocument, url) {
this.pdfDocument = pdfDocument;
this.url = url;
this.resolveDataAvailable();
this._dataAvailableCapability.resolve();
},
/**
@ -110,16 +108,16 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
return;
}
// 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) {
return;
}
this.setFileSize(data.length);
this._updateUI(this.fields['fileSize'], this._parseFileSize());
}.bind(this));
});
// Get the document properties.
this.pdfDocument.getMetadata().then(function(data) {
this.pdfDocument.getMetadata().then((data) => {
var content = {
'fileName': getPDFFileNameFromURL(this.url),
'fileSize': this._parseFileSize(),
@ -139,7 +137,7 @@ var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() {
for (var identifier in content) {
this._updateUI(this.fields[identifier], content[identifier]);
}
}.bind(this));
});
},
/**

View File

@ -81,9 +81,9 @@ var PDFFindController = (function PDFFindControllerClosure() {
this.dirtyMatch = false;
this.findTimeout = null;
this.firstPagePromise = new Promise(function (resolve) {
this._firstPagePromise = new Promise((resolve) => {
this.resolveFirstPage = resolve;
}.bind(this));
});
},
normalize: function PDFFindController_normalize(text) {
@ -277,7 +277,7 @@ var PDFFindController = (function PDFFindControllerClosure() {
this.state = state;
this.updateUIState(FindStates.FIND_PENDING);
this.firstPagePromise.then(function() {
this._firstPagePromise.then(function() {
this.extractText();
clearTimeout(this.findTimeout);

View File

@ -18,7 +18,8 @@ import {
roundToDivide
} from './ui_utils';
import {
CustomStyle, PDFJS, RenderingCancelledException, SVGGraphics
createPromiseCapability, CustomStyle, PDFJS, RenderingCancelledException,
SVGGraphics
} from './pdfjs';
import { domEvents } from './dom_events';
import { RenderingStates } from './pdf_rendering_queue';
@ -493,14 +494,10 @@ var PDFPageView = (function PDFPageViewClosure() {
},
paintOnCanvas: function (canvasWrapper) {
var resolveRenderPromise, rejectRenderPromise;
var promise = new Promise(function (resolve, reject) {
resolveRenderPromise = resolve;
rejectRenderPromise = reject;
});
var renderCapability = createPromiseCapability();
var result = {
promise: promise,
promise: renderCapability.promise,
onRenderContinue: function (cont) {
cont();
},
@ -589,11 +586,11 @@ var PDFPageView = (function PDFPageViewClosure() {
renderTask.promise.then(
function pdfPageRenderCallback() {
showCanvas();
resolveRenderPromise(undefined);
renderCapability.resolve(undefined);
},
function pdfPageRenderError(error) {
showCanvas();
rejectRenderPromise(error);
renderCapability.reject(error);
}
);

View File

@ -13,8 +13,8 @@
* limitations under the License.
*/
import { createPromiseCapability, RenderingCancelledException } from './pdfjs';
import { getOutputScale, mozL10n } from './ui_utils';
import { RenderingCancelledException } from './pdfjs';
import { RenderingStates } from './pdf_rendering_queue';
var THUMBNAIL_WIDTH = 98; // px
@ -275,11 +275,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
this.renderingState = RenderingStates.RUNNING;
var resolveRenderPromise, rejectRenderPromise;
var promise = new Promise(function (resolve, reject) {
resolveRenderPromise = resolve;
rejectRenderPromise = reject;
});
var renderCapability = createPromiseCapability();
var self = this;
function thumbnailDrawCallback(error) {
@ -293,7 +289,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
if (((typeof PDFJSDev === 'undefined' ||
!PDFJSDev.test('PDFJS_NEXT')) && error === 'cancelled') ||
error instanceof RenderingCancelledException) {
resolveRenderPromise(undefined);
renderCapability.resolve(undefined);
return;
}
@ -301,9 +297,9 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
self._convertCanvasToImage();
if (!error) {
resolveRenderPromise(undefined);
renderCapability.resolve(undefined);
} else {
rejectRenderPromise(error);
renderCapability.reject(error);
}
}
@ -336,7 +332,7 @@ var PDFThumbnailView = (function PDFThumbnailViewClosure() {
thumbnailDrawCallback(error);
}
);
return promise;
return renderCapability.promise;
},
setImage: function PDFThumbnailView_setImage(pageView) {

View File

@ -13,17 +13,15 @@
* limitations under the License.
*/
import { createPromiseCapability, PDFJS } from './pdfjs';
import {
CSS_UNITS, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, getVisibleElements,
MAX_AUTO_SCALE, RendererType, SCROLLBAR_PADDING, scrollIntoView,
UNKNOWN_SCALE, VERTICAL_PADDING, watchScroll
} from './ui_utils';
import {
PDFRenderingQueue, RenderingStates,
} from './pdf_rendering_queue';
import { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue';
import { AnnotationLayerBuilder } from './annotation_layer_builder';
import { domEvents } from './dom_events';
import { PDFJS } from './pdfjs';
import { PDFPageView } from './pdf_page_view';
import { SimpleLinkService } from './pdf_link_service';
import { TextLayerBuilder } from './text_layer_builder';
@ -313,41 +311,34 @@ var PDFViewer = (function pdfViewer() {
if (!pdfDocument) {
return;
}
var pagesCount = pdfDocument.numPages;
var self = this;
var resolvePagesPromise;
var pagesPromise = new Promise(function (resolve) {
resolvePagesPromise = resolve;
});
this.pagesPromise = pagesPromise;
pagesPromise.then(function () {
self._pageViewsReady = true;
self.eventBus.dispatch('pagesloaded', {
source: self,
pagesCount: pagesCount
var pagesCapability = createPromiseCapability();
this.pagesPromise = pagesCapability.promise;
pagesCapability.promise.then(() => {
this._pageViewsReady = true;
this.eventBus.dispatch('pagesloaded', {
source: this,
pagesCount,
});
});
var isOnePageRenderedResolved = false;
var resolveOnePageRendered = null;
var onePageRendered = new Promise(function (resolve) {
resolveOnePageRendered = resolve;
});
this.onePageRendered = onePageRendered;
var onePageRenderedCapability = createPromiseCapability();
this.onePageRendered = onePageRenderedCapability.promise;
var bindOnAfterAndBeforeDraw = function (pageView) {
pageView.onBeforeDraw = function pdfViewLoadOnBeforeDraw() {
var bindOnAfterAndBeforeDraw = (pageView) => {
pageView.onBeforeDraw = () => {
// 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
// rendering.
self._buffer.push(this);
this._buffer.push(pageView);
};
pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() {
pageView.onAfterDraw = () => {
if (!isOnePageRenderedResolved) {
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
// viewport for all pages
return firstPagePromise.then(function(pdfPage) {
return firstPagePromise.then((pdfPage) => {
var scale = this.currentScale;
var viewport = pdfPage.getViewport(scale * CSS_UNITS);
for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) {
@ -382,34 +373,31 @@ var PDFViewer = (function pdfViewer() {
this._pages.push(pageView);
}
var linkService = this.linkService;
// Fetch all the pages since the viewport is needed before printing
// starts to create the correct size canvas. Wait until one page is
// rendered so we don't tie up too many resources early on.
onePageRendered.then(function () {
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 {
onePageRenderedCapability.promise.then(() => {
if (PDFJS.disableAutoFetch) {
// 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) {
this.update();
@ -418,7 +406,7 @@ var PDFViewer = (function pdfViewer() {
if (this.findController) {
this.findController.resolveFirstPage();
}
}.bind(this));
});
},
/**