|
|
@ -414,7 +414,7 @@ PDFJS.getDocument = function getDocument(src, |
|
|
|
var transport = new WorkerTransport(messageHandler, task, rangeTransport); |
|
|
|
var transport = new WorkerTransport(messageHandler, task, rangeTransport); |
|
|
|
task._transport = transport; |
|
|
|
task._transport = transport; |
|
|
|
}); |
|
|
|
}); |
|
|
|
}, task._capability.reject); |
|
|
|
}).catch(task._capability.reject); |
|
|
|
|
|
|
|
|
|
|
|
return task; |
|
|
|
return task; |
|
|
|
}; |
|
|
|
}; |
|
|
@ -1186,14 +1186,14 @@ var PDFWorker = (function PDFWorkerClosure() { |
|
|
|
// pdf.worker.js file is needed.
|
|
|
|
// pdf.worker.js file is needed.
|
|
|
|
//#if !PRODUCTION
|
|
|
|
//#if !PRODUCTION
|
|
|
|
if (typeof amdRequire === 'function') { |
|
|
|
if (typeof amdRequire === 'function') { |
|
|
|
amdRequire(['pdfjs/core/worker'], function () { |
|
|
|
amdRequire(['pdfjs/core/network', 'pdfjs/core/worker'], function () { |
|
|
|
PDFJS.fakeWorkerFilesLoadedCapability.resolve(); |
|
|
|
PDFJS.fakeWorkerFilesLoadedCapability.resolve(); |
|
|
|
}); |
|
|
|
}); |
|
|
|
} else if (typeof require === 'function') { |
|
|
|
} else if (typeof require === 'function') { |
|
|
|
require('../core/worker.js'); |
|
|
|
require('../core/worker.js'); |
|
|
|
PDFJS.fakeWorkerFilesLoadedCapability.resolve(); |
|
|
|
PDFJS.fakeWorkerFilesLoadedCapability.resolve(); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
Util.loadScript(PDFJS.workerSrc); |
|
|
|
throw new Error('AMD or CommonJS must be used to load fake worker.'); |
|
|
|
} |
|
|
|
} |
|
|
|
//#endif
|
|
|
|
//#endif
|
|
|
|
//#if PRODUCTION && SINGLE_FILE
|
|
|
|
//#if PRODUCTION && SINGLE_FILE
|
|
|
@ -1253,7 +1253,6 @@ var PDFWorker = (function PDFWorkerClosure() { |
|
|
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=683280
|
|
|
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=683280
|
|
|
|
var worker = new Worker(workerSrc); |
|
|
|
var worker = new Worker(workerSrc); |
|
|
|
var messageHandler = new MessageHandler('main', 'worker', worker); |
|
|
|
var messageHandler = new MessageHandler('main', 'worker', worker); |
|
|
|
|
|
|
|
|
|
|
|
messageHandler.on('test', function PDFWorker_test(data) { |
|
|
|
messageHandler.on('test', function PDFWorker_test(data) { |
|
|
|
if (this.destroyed) { |
|
|
|
if (this.destroyed) { |
|
|
|
this._readyCapability.reject(new Error('Worker was destroyed')); |
|
|
|
this._readyCapability.reject(new Error('Worker was destroyed')); |
|
|
@ -1284,16 +1283,40 @@ var PDFWorker = (function PDFWorkerClosure() { |
|
|
|
console.error.apply(console, data); |
|
|
|
console.error.apply(console, data); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
var testObj = new Uint8Array([PDFJS.postMessageTransfers ? 255 : 0]); |
|
|
|
messageHandler.on('ready', function (data) { |
|
|
|
// Some versions of Opera throw a DATA_CLONE_ERR on serializing the
|
|
|
|
if (this.destroyed) { |
|
|
|
// typed array. Also, checking if we can use transfers.
|
|
|
|
this._readyCapability.reject(new Error('Worker was destroyed')); |
|
|
|
try { |
|
|
|
messageHandler.destroy(); |
|
|
|
messageHandler.send('test', testObj, [testObj.buffer]); |
|
|
|
worker.terminate(); |
|
|
|
} catch (ex) { |
|
|
|
return; // worker was destroyed
|
|
|
|
info('Cannot use postMessage transfers'); |
|
|
|
} |
|
|
|
testObj[0] = 0; |
|
|
|
try { |
|
|
|
messageHandler.send('test', testObj); |
|
|
|
sendTest(); |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
|
|
|
|
// We need fallback to a faked worker.
|
|
|
|
|
|
|
|
this._setupFakeWorker(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}.bind(this)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var sendTest = function () { |
|
|
|
|
|
|
|
var testObj = new Uint8Array( |
|
|
|
|
|
|
|
[PDFJS.postMessageTransfers ? 255 : 0]); |
|
|
|
|
|
|
|
// Some versions of Opera throw a DATA_CLONE_ERR on serializing the
|
|
|
|
|
|
|
|
// typed array. Also, checking if we can use transfers.
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
messageHandler.send('test', testObj, [testObj.buffer]); |
|
|
|
|
|
|
|
} catch (ex) { |
|
|
|
|
|
|
|
info('Cannot use postMessage transfers'); |
|
|
|
|
|
|
|
testObj[0] = 0; |
|
|
|
|
|
|
|
messageHandler.send('test', testObj); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// It might take time for worker to initialize (especially when AMD
|
|
|
|
|
|
|
|
// loader is used). We will try to send test immediately, and then
|
|
|
|
|
|
|
|
// when 'ready' message will arrive. The worker shall process only
|
|
|
|
|
|
|
|
// first received 'test'.
|
|
|
|
|
|
|
|
sendTest(); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} catch (e) { |
|
|
|
} catch (e) { |
|
|
|
info('The worker has been disabled.'); |
|
|
|
info('The worker has been disabled.'); |
|
|
|