diff --git a/src/chunked_stream.js b/src/chunked_stream.js index 7884c60ee..b20c22d4b 100644 --- a/src/chunked_stream.js +++ b/src/chunked_stream.js @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals assert, MissingDataException, isInt, NetworkManager, PDFJS, +/* globals assert, MissingDataException, isInt, NetworkManager, Promise, isEmptyObj */ 'use strict'; @@ -233,7 +233,7 @@ var ChunkedStreamManager = (function ChunkedStreamManagerClosure() { this.requestsByChunk = {}; this.callbacksByRequest = {}; - this.loadedStream = new PDFJS.Promise(); + this.loadedStream = new Promise(); } ChunkedStreamManager.prototype = { diff --git a/src/core.js b/src/core.js index 9532be72c..c0b3dc287 100644 --- a/src/core.js +++ b/src/core.js @@ -18,7 +18,7 @@ isArrayBuffer, isDict, isName, isStream, isString, Lexer, Linearization, NullStream, PartialEvaluator, shadow, Stream, StreamsSequenceStream, stringToPDFString, TODO, Util, warn, XRef, - MissingDataException, PDFJS */ + MissingDataException, Promise */ 'use strict'; @@ -149,21 +149,22 @@ var Page = (function PageClosure() { }, getOperatorList: function Page_getOperatorList(handler) { var self = this; - var promise = new PDFJS.Promise(); + var promise = new Promise(); - var pageListPromise = new PDFJS.Promise(); - var annotationListPromise = new PDFJS.Promise(); + var pageListPromise = new Promise(); + var annotationListPromise = new Promise(); var pdfManager = this.pdfManager; var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', []); var resourcesPromise = pdfManager.ensure(this, 'resources'); - var dataPromises = PDFJS.Promise.all( + var dataPromises = Promise.all( [contentStreamPromise, resourcesPromise]); dataPromises.then(function(data) { var contentStream = data[0]; var resources = data[1]; var pe = self.pe = new PartialEvaluator( + pdfManager, self.xref, handler, self.pageIndex, 'p' + self.pageIndex + '_'); @@ -180,7 +181,7 @@ var Page = (function PageClosure() { pdfManager.ensure(this, 'getAnnotationsForDraw', []).then( function(annotations) { var annotationEvaluator = new PartialEvaluator( - self.xref, handler, self.pageIndex, + pdfManager, self.xref, handler, self.pageIndex, 'p' + self.pageIndex + '_annotation'); pdfManager.ensure(annotationEvaluator, 'getAnnotationsOperatorList', @@ -194,7 +195,7 @@ var Page = (function PageClosure() { } ); - PDFJS.Promise.all([pageListPromise, annotationListPromise]).then( + Promise.all([pageListPromise, annotationListPromise]).then( function(datas) { var pageData = datas[0]; var pageQueue = pageData.queue; @@ -221,12 +222,12 @@ var Page = (function PageClosure() { var self = this; - var textContentPromise = new PDFJS.Promise(); + var textContentPromise = new Promise(); var pdfManager = this.pdfManager; var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', []); - var resourcesPromise = new PDFJS.Promise(); + var resourcesPromise = new Promise(); pdfManager.ensure(this, 'resources').then(function(resources) { pdfManager.ensure(self.xref, 'fetchIfRef', [resources]).then( function(resources) { @@ -235,12 +236,13 @@ var Page = (function PageClosure() { ); }); - var dataPromises = PDFJS.Promise.all([contentStreamPromise, - resourcesPromise]); + var dataPromises = Promise.all([contentStreamPromise, + resourcesPromise]); dataPromises.then(function(data) { var contentStream = data[0]; var resources = data[1]; var pe = new PartialEvaluator( + pdfManager, self.xref, handler, self.pageIndex, 'p' + self.pageIndex + '_'); diff --git a/src/evaluator.js b/src/evaluator.js index 241f00313..3fcf03c30 100644 --- a/src/evaluator.js +++ b/src/evaluator.js @@ -19,15 +19,17 @@ IDENTITY_MATRIX, info, isArray, isCmd, isDict, isEOF, isName, isNum, isStream, isString, JpegStream, Lexer, Metrics, Name, Parser, Pattern, PDFImage, PDFJS, serifFonts, stdFontMap, symbolsFonts, - TilingPattern, TODO, warn, Util, MissingDataException, globalScope */ + TilingPattern, TODO, warn, Util, MissingDataException, Promise */ 'use strict'; var PartialEvaluator = (function PartialEvaluatorClosure() { - function PartialEvaluator(xref, handler, pageIndex, uniquePrefix) { + function PartialEvaluator(pdfManager, xref, handler, pageIndex, + uniquePrefix) { this.state = new EvalState(); this.stateStack = []; + this.pdfManager = pdfManager; this.xref = xref; this.handler = handler; this.pageIndex = pageIndex; @@ -165,7 +167,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { buildFormXObject: function PartialEvaluator_buildFormXObject(resources, xobj, smask) { var self = this; - var promise = new PDFJS.Promise(); + var promise = new Promise(); var fnArray = []; var argsArray = []; @@ -302,7 +304,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { fn, args, resources, pattern, patternDict) { var self = this; // Create an IR of the pattern code. - var promise = new PDFJS.Promise(); + var promise = new Promise(); var opListPromise = this.getOperatorList(pattern, patternDict.get('Resources') || resources); opListPromise.then(function(data) { @@ -324,7 +326,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { handleSetFont: function PartialEvaluator_handleSetFont( resources, fontArgs, font) { - var promise = new PDFJS.Promise(); + var promise = new Promise(); // TODO(mack): Not needed? var fontName; if (fontArgs) { @@ -413,7 +415,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { gStateObj.push([key, value]); break; case 'Font': - var promise = new PDFJS.Promise(); + var promise = new Promise(); self.handleSetFont(resources, null, value[0]).then(function(data) { var gState = ['Font', data.loadedName, value[1]]; promise.resolve({ @@ -478,8 +480,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { } } - var promise = new PDFJS.Promise(); - PDFJS.Promise.all(promises).then(function(datas) { + var promise = new Promise(); + Promise.all(promises).then(function(datas) { for (var i = 0, n = datas.length; i < n; ++i) { var data = datas[i]; var index = indices[i]; @@ -500,7 +502,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { loadFont: function PartialEvaluator_loadFont(fontName, font, xref, resources) { - var promise = new PDFJS.Promise(); + var promise = new Promise(); var fontRes = resources.get('Font'); @@ -551,7 +553,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { opListPromises.push( this.getOperatorList(glyphStream, fontResources)); } - PDFJS.Promise.all(opListPromises).then(function(datas) { + Promise.all(opListPromises).then(function(datas) { var charProcOperatorList = {}; var dependencies = {}; for (var i = 0, n = charProcKeys.length; i < n; ++i) { @@ -606,7 +608,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { // dictionary var parser = new Parser(new Lexer(stream, OP_MAP), false, xref); - var promise = new PDFJS.Promise(); + var promise = new Promise(); function parseCommands() { try { parser.restoreState(); @@ -770,7 +772,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { subQueuePromises.push(argsArray[i][0]); } } - PDFJS.Promise.all(subQueuePromises).then(function(datas) { + Promise.all(subQueuePromises).then(function(datas) { // TODO(mack): Optimize by using repositioning elements // in original queue rather than creating new queue @@ -817,10 +819,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { throw e; } - var streamManager = globalScope.pdfManager.streamManager; - streamManager.requestRange(e.begin, e.end, function() { - parseCommands(); - }); + self.pdfManager.requestRange(e.begin, e.end).then(parseCommands); } } parser.saveState(); @@ -832,7 +831,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { getAnnotationsOperatorList: function PartialEvaluator_getAnnotationsOperatorList(annotations, dependency) { - var promise = new PDFJS.Promise(); + var promise = new Promise(); // 12.5.5: Algorithm: Appearance streams function getTransformMatrix(rect, bbox, matrix) { @@ -878,13 +877,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { annotation.resources); opListPromises.push(opListPromise); } else { - var opListPromise = new PDFJS.Promise(); + var opListPromise = new Promise(); opListPromise.resolve(createOperatorList()); opListPromises.push(opListPromise); } } - PDFJS.Promise.all(opListPromises).then(function(datas) { + Promise.all(opListPromises).then(function(datas) { var fnArray = []; var argsArray = []; var dependencies = {}; @@ -923,10 +922,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { var MULTI_SPACE_FACTOR = 1.5; var self = this; - var statePromise = new PDFJS.Promise(); + var statePromise = new Promise(); function handleSetFont(fontName, fontRef, resources) { - var promise = new PDFJS.Promise(); + var promise = new Promise(); self.loadFont(fontName, fontRef, self.xref, resources).then( function(data) { promise.resolve(data.font.translated); @@ -969,7 +968,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { //.translated; break; case 'TJ': - var chunkPromise = new PDFJS.Promise(); + var chunkPromise = new Promise(); chunkPromises.push(chunkPromise); fontPromise.then(function(items, font) { var chunk = ''; @@ -994,7 +993,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { }.bind(null, args[0])); break; case 'Tj': - var chunkPromise = new PDFJS.Promise(); + var chunkPromise = new Promise(); chunkPromises.push(chunkPromise); fontPromise.then(function(charCodes, font) { var chunk = fontCharsToUnicode(charCodes, font); @@ -1006,7 +1005,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { // For search, adding a extra white space for line breaks // would be better here, but that causes too much spaces in // the text-selection divs. - var chunkPromise = new PDFJS.Promise(); + var chunkPromise = new Promise(); chunkPromises.push(chunkPromise); fontPromise.then(function(charCodes, font) { var chunk = fontCharsToUnicode(charCodes, font); @@ -1016,7 +1015,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { break; case '"': // Note comment in "'" - var chunkPromise = new PDFJS.Promise(); + var chunkPromise = new Promise(); chunkPromises.push(chunkPromise); fontPromise.then(function(charCodes, font) { var chunk = fontCharsToUnicode(charCodes, font); @@ -1081,7 +1080,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { } } // while - PDFJS.Promise.all(chunkPromises).then(function(datas) { + Promise.all(chunkPromises).then(function(datas) { var bidiTexts = []; for (var i = 0, n = datas.length; i < n; ++i) { var bidiText = datas[i]; @@ -1100,10 +1099,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { throw e; } - var streamManager = globalScope.pdfManager.streamManager; - streamManager.requestRange(e.begin, e.end, function() { - parseCommands(); - }); + self.pdfManager.requestRange(e.begin, e.end).then(parseCommands); } } parser.saveState(); diff --git a/src/obj.js b/src/obj.js index 6427d7098..7a7ee5463 100644 --- a/src/obj.js +++ b/src/obj.js @@ -17,8 +17,8 @@ /* globals assertWellFormed, bytesToString, CipherTransformFactory, error, info, InvalidPDFException, isArray, isCmd, isDict, isInt, isName, isRef, isStream, JpegStream, Lexer, log, Page, Parser, Promise, shadow, - stringToPDFString, stringToUTF8String, warn, isString, assert, PDFJS, - MissingDataException, XRefParseException, Stream */ + stringToPDFString, stringToUTF8String, warn, isString, assert, + Promise, MissingDataException, XRefParseException, Stream */ 'use strict'; @@ -339,7 +339,7 @@ var Catalog = (function CatalogClosure() { getPage: function Catalog_getPage(pageIndex) { if (!(pageIndex in this.pagePromises)) { - this.pagePromises[pageIndex] = new PDFJS.Promise(); + this.pagePromises[pageIndex] = new Promise(); } return this.pagePromises[pageIndex]; }, @@ -367,7 +367,7 @@ var Catalog = (function CatalogClosure() { var page = new Page(this.pdfManager, this.xref, pageIndex, kid, kidRef); if (!(pageIndex in this.pagePromises)) { - this.pagePromises[pageIndex] = new PDFJS.Promise(); + this.pagePromises[pageIndex] = new Promise(); } this.pagePromises[pageIndex].resolve(page); diff --git a/src/pdf_manager.js b/src/pdf_manager.js index 1fe7ec058..2ca02bb8d 100644 --- a/src/pdf_manager.js +++ b/src/pdf_manager.js @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* globals NotImplementedException, MissingDataException, PDFJS, Stream, +/* globals NotImplementedException, MissingDataException, Promise, Stream, PDFDocument, ChunkedStream, ChunkedStreamManager */ 'use strict'; @@ -50,6 +50,10 @@ var BasePdfManager = (function BasePdfManagerClosure() { return new NotImplementedException(); }, + requestRange: function BasePdfManager_ensure(begin, end) { + return new NotImplementedException(); + }, + requestLoadedStream: function BasePdfManager_requestLoadedStream() { return new NotImplementedException(); } @@ -62,7 +66,7 @@ var LocalPdfManager = (function LocalPdfManagerClosure() { function LocalPdfManager(data, password) { var stream = new Stream(data); this.pdfModel = new PDFDocument(this, stream, password); - this.loadedStream = new PDFJS.Promise(); + this.loadedStream = new Promise(); this.loadedStream.resolve(stream); } @@ -71,7 +75,7 @@ var LocalPdfManager = (function LocalPdfManagerClosure() { LocalPdfManager.prototype.ensure = function LocalPdfManager_ensure(obj, prop, args) { - var promise = new PDFJS.Promise(); + var promise = new Promise(); try { var value = obj[prop]; var result; @@ -88,6 +92,13 @@ var LocalPdfManager = (function LocalPdfManagerClosure() { return promise; }; + LocalPdfManager.prototype.requestRange = + function LocalPdfManager_requestRange(begin, end) { + var promise = new Promise(); + promise.resolve(); + return promise; + }; + LocalPdfManager.prototype.requestLoadedStream = function LocalPdfManager_requestLoadedStream() { }; @@ -126,7 +137,7 @@ var NetworkPdfManager = (function NetworkPdfManagerClosure() { NetworkPdfManager.prototype.ensure = function NetworkPdfManager_ensure(obj, prop, args) { - var promise = new PDFJS.Promise(); + var promise = new Promise(); this.ensureHelper(promise, obj, prop, args); return promise; }; @@ -155,6 +166,15 @@ var NetworkPdfManager = (function NetworkPdfManagerClosure() { } }; + NetworkPdfManager.prototype.requestRange = + function NetworkPdfManager_requestRange(begin, end) { + var promise = new Promise(); + this.streamManager.requestRange(begin, end, function() { + promise.resolve(); + }); + return promise; + }; + NetworkPdfManager.prototype.requestLoadedStream = function NetworkPdfManager_requestLoadedStream() { this.streamManager.requestAllChunks(); diff --git a/src/worker.js b/src/worker.js index a86926464..d3d73d415 100644 --- a/src/worker.js +++ b/src/worker.js @@ -112,7 +112,7 @@ var WorkerMessageHandler = { var pdfManager; function loadDocument(recoveryMode) { - var loadDocumentPromise = new PDFJS.Promise(); + var loadDocumentPromise = new Promise(); var parseSuccess = function parseSuccess() { var numPagesPromise = pdfManager.ensureModel('numPages'); @@ -122,7 +122,7 @@ var WorkerMessageHandler = { var metadataPromise = pdfManager.ensureCatalog('metadata'); var encryptedPromise = pdfManager.ensureXRef('encrypt'); var javaScriptPromise = pdfManager.ensureCatalog('javaScript'); - PDFJS.Promise.all([numPagesPromise, fingerprintPromise, outlinePromise, + Promise.all([numPagesPromise, fingerprintPromise, outlinePromise, infoPromise, metadataPromise, encryptedPromise, javaScriptPromise]).then( function onDocReady(results) { @@ -155,7 +155,7 @@ var WorkerMessageHandler = { } function getPdfManager(data) { - var pdfManagerPromise = new PDFJS.Promise(); + var pdfManagerPromise = new Promise(); var source = data.source; var disableRange = data.disableRange; @@ -285,7 +285,6 @@ var WorkerMessageHandler = { }; getPdfManager(data).then(function() { - globalScope.pdfManager = pdfManager; loadDocument(false).then(onSuccess, function(ex) { // Try again with recoveryMode == true if (!(ex instanceof XRefParseException)) { @@ -308,7 +307,7 @@ var WorkerMessageHandler = { var refPromise = pdfManager.ensure(page, 'ref'); var viewPromise = pdfManager.ensure(page, 'view'); - PDFJS.Promise.all([rotatePromise, refPromise, viewPromise]).then( + Promise.all([rotatePromise, refPromise, viewPromise]).then( function(results) { var page = { pageIndex: data.pageIndex, diff --git a/test/unit/evaluator_spec.js b/test/unit/evaluator_spec.js index acedb640d..5d558fca4 100644 --- a/test/unit/evaluator_spec.js +++ b/test/unit/evaluator_spec.js @@ -28,9 +28,12 @@ describe('evaluator', function() { } }; + function PdfManagerMock() { } + describe('splitCombinedOperations', function() { it('should reject unknown operations', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var stream = new StringStream('qTT'); var promise = evaluator.getOperatorList(stream, new ResourcesMock()); @@ -44,7 +47,8 @@ describe('evaluator', function() { }); it('should handle one operations', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var stream = new StringStream('Q'); var promise = evaluator.getOperatorList(stream, new ResourcesMock()); @@ -57,7 +61,8 @@ describe('evaluator', function() { }); it('should handle two glued operations', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var resources = new ResourcesMock(); resources.Res1 = {}; @@ -73,7 +78,8 @@ describe('evaluator', function() { }); it('should handle tree glued operations', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var stream = new StringStream('qqq'); var promise = evaluator.getOperatorList(stream, new ResourcesMock()); @@ -88,7 +94,8 @@ describe('evaluator', function() { }); it('should handle three glued operations #2', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var resources = new ResourcesMock(); resources.Res1 = {}; @@ -105,7 +112,8 @@ describe('evaluator', function() { }); it('should handle glued operations and operands', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var stream = new StringStream('q5 Ts'); var promise = evaluator.getOperatorList(stream, new ResourcesMock()); @@ -122,7 +130,8 @@ describe('evaluator', function() { }); it('should handle glued operations and literals', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var stream = new StringStream('trueifalserinullq'); var promise = evaluator.getOperatorList(stream, new ResourcesMock()); @@ -145,7 +154,8 @@ describe('evaluator', function() { describe('validateNumberOfArgs', function() { it('should execute if correct number of arguments', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var stream = new StringStream('5 1 d0'); console.log('here!'); @@ -158,7 +168,8 @@ describe('evaluator', function() { }); }); it('should execute if too many arguments', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var stream = new StringStream('5 1 4 d0'); var promise = evaluator.getOperatorList(stream, new ResourcesMock()); @@ -171,7 +182,8 @@ describe('evaluator', function() { }); }); it('should skip if too few arguments', function() { - var evaluator = new PartialEvaluator(new XrefMock(), new HandlerMock(), + var evaluator = new PartialEvaluator(new PdfManagerMock(), + new XrefMock(), new HandlerMock(), 'prefix'); var stream = new StringStream('5 d0'); var promise = evaluator.getOperatorList(stream, new ResourcesMock());