diff --git a/src/core.js b/src/core.js index dc44edb76..a6effd2bd 100644 --- a/src/core.js +++ b/src/core.js @@ -515,8 +515,7 @@ var PDFDoc = (function PDFDocClosure() { // Tell the worker the file it was created from. messageHandler.send('workerSrc', workerSrc); - messageHandler.on('test', function pdfDocTest(message) { - var supportTypedArray = message.data; + messageHandler.on('test', function pdfDocTest(supportTypedArray) { if (supportTypedArray) { this.worker = worker; this.setupMessageHandler(messageHandler); @@ -554,8 +553,7 @@ var PDFDoc = (function PDFDocClosure() { setupMessageHandler: function(messageHandler) { this.messageHandler = messageHandler; - messageHandler.on('page', function pdfDocPage(message) { - var data = message.data; + messageHandler.on('page', function pdfDocPage(data) { var pageNum = data.pageNum; var page = this.pageCache[pageNum]; var depFonts = data.depFonts; @@ -563,8 +561,7 @@ var PDFDoc = (function PDFDocClosure() { page.startRenderingFromIRQueue(data.IRQueue, depFonts); }, this); - messageHandler.on('obj', function pdfDocObj(message) { - var data = message.data; + messageHandler.on('obj', function pdfDocObj(data) { var id = data[0]; var type = data[1]; @@ -601,8 +598,7 @@ var PDFDoc = (function PDFDocClosure() { } }, this); - messageHandler.on('font_ready', function pdfDocFontReady(message) { - var data = message.data; + messageHandler.on('font_ready', function pdfDocFontReady(data) { var id = data[0]; var font = new FontShape(data[1]); @@ -614,8 +610,7 @@ var PDFDoc = (function PDFDocClosure() { } }.bind(this)); - messageHandler.on('page_error', function pdfDocError(message) { - var data = message.data; + messageHandler.on('page_error', function pdfDocError(data) { var page = this.pageCache[data.pageNum]; if (page.callback) page.callback(data.error); @@ -623,9 +618,9 @@ var PDFDoc = (function PDFDocClosure() { throw data.error; }, this); - messageHandler.on('jpeg_decode', function(message) { - var imageData = message.data[0]; - var components = message.data[1]; + messageHandler.on('jpeg_decode', function(data, promise) { + var imageData = data[0]; + var components = data[1]; if (components != 3 && components != 1) error('Only 3 component or 1 component can be returned'); @@ -652,7 +647,7 @@ var PDFDoc = (function PDFDocClosure() { buf[j] = data[i]; } } - message.reply({ data: buf, width: width, height: height}); + promise.resolve({ data: buf, width: width, height: height}); }).bind(this); var src = 'data:image/jpeg;base64,' + window.btoa(imageData); img.src = src; diff --git a/src/worker.js b/src/worker.js index c0496015a..c18de65ad 100644 --- a/src/worker.js +++ b/src/worker.js @@ -3,41 +3,6 @@ 'use strict'; -/** - * A wrapper for data to facilitate adding functionality to messages. - */ -function Message(data) { - this.data = data; - this.allowsReply = false; - this.combObj; - this.id; -} -Message.prototype = { - /** - * Reply to the action handler that sent the message. - */ - reply: function messageReply(data) { - if (!this.allowsReply) - error('This message does not accept replies.'); - - this.combObj.postMessage({ - isReply: true, - callbackId: this.id, - data: data - }); - }, - /** - * Setup the message to allow a reply. - * @param {Object} combObj The handler that has a postMessage function. - * @param {String} id The id to identify this message. - */ - setupReply: function setupReply(combObj, id) { - this.allowsReply = true; - this.combObj = combObj; - this.id = id; - } -}; - function MessageHandler(name, comObj) { this.name = name; this.comObj = comObj; @@ -65,11 +30,19 @@ function MessageHandler(name, comObj) { } } else if (data.action in ah) { var action = ah[data.action]; - var message = new Message(data.data); - if (data.callbackId) - message.setupReply(comObj, data.callbackId); - - action[0].call(action[1], message); + if (data.callbackId) { + var promise = new Promise(); + promise.then(function(resolvedData) { + comObj.postMessage({ + isReply: true, + callbackId: data.callbackId, + data: resolvedData + }); + }); + action[0].call(action[1], data.data, promise); + } else { + action[0].call(action[1], data.data); + } } else { throw 'Unkown action from worker: ' + data.action; } @@ -108,8 +81,7 @@ var WorkerMessageHandler = { setup: function wphSetup(handler) { var pdfDoc = null; - handler.on('test', function wphSetupTest(message) { - var data = message.data; + handler.on('test', function wphSetupTest(data) { handler.send('test', data instanceof Uint8Array); }); @@ -120,15 +92,13 @@ var WorkerMessageHandler = { // undefined action `workerSrc`. }); - handler.on('doc', function wphSetupDoc(message) { - var data = message.data; + handler.on('doc', function wphSetupDoc(data) { // Create only the model of the PDFDoc, which is enough for // processing the content of the pdf. pdfDoc = new PDFDocModel(new Stream(data)); }); - handler.on('page_request', function wphSetupPageRequest(message) { - var pageNum = message.data; + handler.on('page_request', function wphSetupPageRequest(pageNum) { pageNum = parseInt(pageNum); @@ -177,8 +147,7 @@ var WorkerMessageHandler = { }); }, this); - handler.on('font', function wphSetupFont(message) { - var data = message.data; + handler.on('font', function wphSetupFont(data) { var objId = data[0]; var name = data[1]; var file = data[2];