Merge pull request #9781 from Snuffleupagus/api-misc-cleanup

Miscellaneous API clean-up
This commit is contained in:
Tim van der Meij 2018-06-09 14:15:02 +02:00 committed by GitHub
commit 86422e67cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 88 additions and 124 deletions

View File

@ -335,7 +335,7 @@ var WorkerMessageHandler = {
// check if Uint8Array can be sent to worker // check if Uint8Array can be sent to worker
if (!(data instanceof Uint8Array)) { if (!(data instanceof Uint8Array)) {
handler.send('test', 'main', false); handler.send('test', false);
return; return;
} }
// making sure postMessage transfers are working // making sure postMessage transfers are working
@ -390,8 +390,8 @@ var WorkerMessageHandler = {
var workerHandlerName = docParams.docId + '_worker'; var workerHandlerName = docParams.docId + '_worker';
var handler = new MessageHandler(workerHandlerName, docId, port); var handler = new MessageHandler(workerHandlerName, docId, port);
// Ensure that postMessage transfers are correctly enabled/disabled, // Ensure that postMessage transfers are always correctly enabled/disabled,
// to prevent "DataCloneError" in older versions of IE (see issue 6957). // to prevent "DataCloneError" in browsers without transfers support.
handler.postMessageTransfers = docParams.postMessageTransfers; handler.postMessageTransfers = docParams.postMessageTransfers;
function ensureNotTerminated() { function ensureNotTerminated() {
@ -629,9 +629,8 @@ var WorkerMessageHandler = {
newPdfManager.terminate(); newPdfManager.terminate();
throw new Error('Worker was terminated'); throw new Error('Worker was terminated');
} }
pdfManager = newPdfManager; pdfManager = newPdfManager;
handler.send('PDFManagerReady', null);
pdfManager.onLoadedStream().then(function(stream) { pdfManager.onLoadedStream().then(function(stream) {
handler.send('DataLoaded', { length: stream.bytes.byteLength, }); handler.send('DataLoaded', { length: stream.bytes.byteLength, });
}); });
@ -640,19 +639,17 @@ var WorkerMessageHandler = {
handler.on('GetPage', function wphSetupGetPage(data) { handler.on('GetPage', function wphSetupGetPage(data) {
return pdfManager.getPage(data.pageIndex).then(function(page) { return pdfManager.getPage(data.pageIndex).then(function(page) {
var rotatePromise = pdfManager.ensure(page, 'rotate');
var refPromise = pdfManager.ensure(page, 'ref');
var userUnitPromise = pdfManager.ensure(page, 'userUnit');
var viewPromise = pdfManager.ensure(page, 'view');
return Promise.all([ return Promise.all([
rotatePromise, refPromise, userUnitPromise, viewPromise pdfManager.ensure(page, 'rotate'),
]).then(function(results) { pdfManager.ensure(page, 'ref'),
pdfManager.ensure(page, 'userUnit'),
pdfManager.ensure(page, 'view'),
]).then(function([rotate, ref, userUnit, view]) {
return { return {
rotate: results[0], rotate,
ref: results[1], ref,
userUnit: results[2], userUnit,
view: results[3], view,
}; };
}); });
}); });

View File

@ -16,13 +16,13 @@
import { import {
assert, createPromiseCapability, getVerbosityLevel, info, InvalidPDFException, assert, createPromiseCapability, getVerbosityLevel, info, InvalidPDFException,
isArrayBuffer, isNum, isSameOrigin, MissingPDFException, NativeImageDecoding, isArrayBuffer, isSameOrigin, MissingPDFException, NativeImageDecoding,
PasswordException, setVerbosityLevel, shadow, stringToBytes, PasswordException, setVerbosityLevel, shadow, stringToBytes,
UnexpectedResponseException, UnknownErrorException, unreachable, Util, warn UnexpectedResponseException, UnknownErrorException, unreachable, Util, warn
} from '../shared/util'; } from '../shared/util';
import { import {
DOMCanvasFactory, DOMCMapReaderFactory, DummyStatTimer, PageViewport, DOMCanvasFactory, DOMCMapReaderFactory, DummyStatTimer, loadScript,
RenderingCancelledException, StatTimer PageViewport, RenderingCancelledException, StatTimer
} from './dom_utils'; } from './dom_utils';
import { FontFaceObject, FontLoader } from './font_loader'; import { FontFaceObject, FontLoader } from './font_loader';
import { apiCompatibilityParams } from './api_compatibility'; import { apiCompatibilityParams } from './api_compatibility';
@ -231,7 +231,6 @@ function getDocument(src) {
let params = Object.create(null); let params = Object.create(null);
var rangeTransport = null; var rangeTransport = null;
let worker = null; let worker = null;
let CMapReaderFactory = DOMCMapReaderFactory;
for (var key in source) { for (var key in source) {
if (key === 'url' && typeof window !== 'undefined') { if (key === 'url' && typeof window !== 'undefined') {
@ -260,14 +259,12 @@ function getDocument(src) {
'data property.'); 'data property.');
} }
continue; continue;
} else if (key === 'CMapReaderFactory') {
CMapReaderFactory = source[key];
continue;
} }
params[key] = source[key]; params[key] = source[key];
} }
params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
params.CMapReaderFactory = params.CMapReaderFactory || DOMCMapReaderFactory;
params.ignoreErrors = params.stopAtErrors !== true; params.ignoreErrors = params.stopAtErrors !== true;
params.pdfBug = params.pdfBug === true; params.pdfBug = params.pdfBug === true;
@ -355,7 +352,7 @@ function getDocument(src) {
var messageHandler = new MessageHandler(docId, workerId, worker.port); var messageHandler = new MessageHandler(docId, workerId, worker.port);
messageHandler.postMessageTransfers = worker.postMessageTransfers; messageHandler.postMessageTransfers = worker.postMessageTransfers;
var transport = new WorkerTransport(messageHandler, task, networkStream, var transport = new WorkerTransport(messageHandler, task, networkStream,
params, CMapReaderFactory); params);
task._transport = transport; task._transport = transport;
messageHandler.send('Ready', null); messageHandler.send('Ready', null);
}); });
@ -387,7 +384,7 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
docId, docId,
apiVersion: (typeof PDFJSDev !== 'undefined' ? apiVersion: (typeof PDFJSDev !== 'undefined' ?
PDFJSDev.eval('BUNDLE_VERSION') : null), PDFJSDev.eval('BUNDLE_VERSION') : null),
source: { source: { // Only send the required properties, and *not* the entire object.
data: source.data, data: source.data,
url: source.url, url: source.url,
password: source.password, password: source.password,
@ -585,7 +582,7 @@ var PDFDataRangeTransport = (function pdfDataRangeTransportClosure() {
*/ */
var PDFDocumentProxy = (function PDFDocumentProxyClosure() { var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
function PDFDocumentProxy(pdfInfo, transport, loadingTask) { function PDFDocumentProxy(pdfInfo, transport, loadingTask) {
this.pdfInfo = pdfInfo; this._pdfInfo = pdfInfo;
this.transport = transport; this.transport = transport;
this.loadingTask = loadingTask; this.loadingTask = loadingTask;
} }
@ -594,14 +591,14 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
* @return {number} Total number of pages the PDF contains. * @return {number} Total number of pages the PDF contains.
*/ */
get numPages() { get numPages() {
return this.pdfInfo.numPages; return this._pdfInfo.numPages;
}, },
/** /**
* @return {string} A unique ID to identify a PDF. Not guaranteed to be * @return {string} A unique ID to identify a PDF. Not guaranteed to be
* unique. * unique.
*/ */
get fingerprint() { get fingerprint() {
return this.pdfInfo.fingerprint; return this._pdfInfo.fingerprint;
}, },
/** /**
* @param {number} pageNumber The page number to get. The first page is 1. * @param {number} pageNumber The page number to get. The first page is 1.
@ -831,7 +828,7 @@ var PDFDocumentProxy = (function PDFDocumentProxyClosure() {
var PDFPageProxy = (function PDFPageProxyClosure() { var PDFPageProxy = (function PDFPageProxyClosure() {
function PDFPageProxy(pageIndex, pageInfo, transport, pdfBug = false) { function PDFPageProxy(pageIndex, pageInfo, transport, pdfBug = false) {
this.pageIndex = pageIndex; this.pageIndex = pageIndex;
this.pageInfo = pageInfo; this._pageInfo = pageInfo;
this.transport = transport; this.transport = transport;
this._stats = (pdfBug ? new StatTimer() : DummyStatTimer); this._stats = (pdfBug ? new StatTimer() : DummyStatTimer);
this._pdfBug = pdfBug; this._pdfBug = pdfBug;
@ -853,27 +850,27 @@ var PDFPageProxy = (function PDFPageProxyClosure() {
* @return {number} The number of degrees the page is rotated clockwise. * @return {number} The number of degrees the page is rotated clockwise.
*/ */
get rotate() { get rotate() {
return this.pageInfo.rotate; return this._pageInfo.rotate;
}, },
/** /**
* @return {Object} The reference that points to this page. It has 'num' and * @return {Object} The reference that points to this page. It has 'num' and
* 'gen' properties. * 'gen' properties.
*/ */
get ref() { get ref() {
return this.pageInfo.ref; return this._pageInfo.ref;
}, },
/** /**
* @return {number} The default size of units in 1/72nds of an inch. * @return {number} The default size of units in 1/72nds of an inch.
*/ */
get userUnit() { get userUnit() {
return this.pageInfo.userUnit; return this._pageInfo.userUnit;
}, },
/** /**
* @return {Array} An array of the visible portion of the PDF page in the * @return {Array} An array of the visible portion of the PDF page in the
* user space units - [x1, y1, x2, y2]. * user space units - [x1, y1, x2, y2].
*/ */
get view() { get view() {
return this.pageInfo.view; return this._pageInfo.view;
}, },
/** /**
@ -1359,7 +1356,7 @@ var PDFWorker = (function PDFWorkerClosure() {
} }
} else { } else {
let loader = fakeWorkerFilesLoader || function(callback) { let loader = fakeWorkerFilesLoader || function(callback) {
Util.loadScript(getWorkerSrc(), function() { loadScript(getWorkerSrc()).then(function() {
callback(window.pdfjsWorker.WorkerMessageHandler); callback(window.pdfjsWorker.WorkerMessageHandler);
}); });
}; };
@ -1382,7 +1379,8 @@ var PDFWorker = (function PDFWorkerClosure() {
* @param {PDFWorkerParameters} params - The worker initialization parameters. * @param {PDFWorkerParameters} params - The worker initialization parameters.
*/ */
function PDFWorker({ name = null, port = null, function PDFWorker({ name = null, port = null,
postMessageTransfers = true, verbosity = null, } = {}) { postMessageTransfers = true,
verbosity = getVerbosityLevel(), } = {}) {
if (port && pdfWorkerPorts.has(port)) { if (port && pdfWorkerPorts.has(port)) {
throw new Error('Cannot use more than one PDFWorker per port'); throw new Error('Cannot use more than one PDFWorker per port');
} }
@ -1390,7 +1388,7 @@ var PDFWorker = (function PDFWorkerClosure() {
this.name = name; this.name = name;
this.destroyed = false; this.destroyed = false;
this.postMessageTransfers = postMessageTransfers !== false; this.postMessageTransfers = postMessageTransfers !== false;
this.verbosity = (isNum(verbosity) ? verbosity : getVerbosityLevel()); this.verbosity = verbosity;
this._readyCapability = createPromiseCapability(); this._readyCapability = createPromiseCapability();
this._port = null; this._port = null;
@ -1480,8 +1478,7 @@ var PDFWorker = (function PDFWorkerClosure() {
terminateEarly(); terminateEarly();
return; // worker was destroyed return; // worker was destroyed
} }
var supportTypedArray = data && data.supportTypedArray; if (data && data.supportTypedArray) {
if (supportTypedArray) {
this._messageHandler = messageHandler; this._messageHandler = messageHandler;
this._port = worker; this._port = worker;
this._webWorker = worker; this._webWorker = worker;
@ -1553,12 +1550,7 @@ var PDFWorker = (function PDFWorkerClosure() {
this._readyCapability.reject(new Error('Worker was destroyed')); this._readyCapability.reject(new Error('Worker was destroyed'));
return; return;
} }
let port = new LoopbackPort();
// We cannot turn on proper fake port simulation (this includes
// structured cloning) when typed arrays are not supported. Relying
// on a chance that messages will be sent in proper order.
var isTypedArraysPresent = Uint8Array !== Float32Array;
var port = new LoopbackPort(isTypedArraysPresent);
this._port = port; this._port = port;
// All fake workers use the same port, making id unique. // All fake workers use the same port, making id unique.
@ -1598,6 +1590,9 @@ var PDFWorker = (function PDFWorkerClosure() {
* @param {PDFWorkerParameters} params - The worker initialization parameters. * @param {PDFWorkerParameters} params - The worker initialization parameters.
*/ */
PDFWorker.fromPort = function(params) { PDFWorker.fromPort = function(params) {
if (!params || !params.port) {
throw new Error('PDFWorker.fromPort - invalid method signature.');
}
if (pdfWorkerPorts.has(params.port)) { if (pdfWorkerPorts.has(params.port)) {
return pdfWorkerPorts.get(params.port); return pdfWorkerPorts.get(params.port);
} }
@ -1616,14 +1611,13 @@ var PDFWorker = (function PDFWorkerClosure() {
* @ignore * @ignore
*/ */
var WorkerTransport = (function WorkerTransportClosure() { var WorkerTransport = (function WorkerTransportClosure() {
function WorkerTransport(messageHandler, loadingTask, networkStream, function WorkerTransport(messageHandler, loadingTask, networkStream, params) {
params, CMapReaderFactory) {
this.messageHandler = messageHandler; this.messageHandler = messageHandler;
this.loadingTask = loadingTask; this.loadingTask = loadingTask;
this.commonObjs = new PDFObjects(); this.commonObjs = new PDFObjects();
this.fontLoader = new FontLoader(loadingTask.docId); this.fontLoader = new FontLoader(loadingTask.docId);
this._params = params; this._params = params;
this.CMapReaderFactory = new CMapReaderFactory({ this.CMapReaderFactory = new params.CMapReaderFactory({
baseUrl: params.cMapUrl, baseUrl: params.cMapUrl,
isCompressed: params.cMapPacked, isCompressed: params.cMapPacked,
}); });
@ -1837,9 +1831,6 @@ var WorkerTransport = (function WorkerTransportClosure() {
this.downloadInfoCapability.resolve(data); this.downloadInfoCapability.resolve(data);
}, this); }, this);
messageHandler.on('PDFManagerReady', function transportPage(data) {
}, this);
messageHandler.on('StartRenderPage', function transportRender(data) { messageHandler.on('StartRenderPage', function transportRender(data) {
if (this.destroyed) { if (this.destroyed) {
return; // Ignore any pending requests if the worker was terminated. return; // Ignore any pending requests if the worker was terminated.
@ -2030,7 +2021,7 @@ var WorkerTransport = (function WorkerTransportClosure() {
var height = img.height; var height = img.height;
var size = width * height; var size = width * height;
var rgbaLength = size * 4; var rgbaLength = size * 4;
var buf = new Uint8Array(size * components); var buf = new Uint8ClampedArray(size * components);
var tmpCanvas = document.createElement('canvas'); var tmpCanvas = document.createElement('canvas');
tmpCanvas.width = width; tmpCanvas.width = width;
tmpCanvas.height = height; tmpCanvas.height = height;

View File

@ -428,6 +428,19 @@ class DummyStatTimer {
} }
} }
function loadScript(src) {
return new Promise((resolve, reject) => {
let script = document.createElement('script');
script.src = src;
script.onload = resolve;
script.onerror = function() {
reject(new Error(`Cannot load script at: ${script.src}`));
};
(document.head || document.documentElement).appendChild(script);
});
}
export { export {
PageViewport, PageViewport,
RenderingCancelledException, RenderingCancelledException,
@ -440,4 +453,5 @@ export {
DOMSVGFactory, DOMSVGFactory,
StatTimer, StatTimer,
DummyStatTimer, DummyStatTimer,
loadScript,
}; };

View File

@ -90,8 +90,7 @@ class BaseFullReader {
constructor(stream) { constructor(stream) {
this._url = stream.url; this._url = stream.url;
this._done = false; this._done = false;
this._errored = false; this._storedError = null;
this._reason = null;
this.onProgress = null; this.onProgress = null;
let source = stream.source; let source = stream.source;
this._contentLength = source.length; // optional this._contentLength = source.length; // optional
@ -137,8 +136,8 @@ class BaseFullReader {
if (this._done) { if (this._done) {
return Promise.resolve({ value: undefined, done: true, }); return Promise.resolve({ value: undefined, done: true, });
} }
if (this._errored) { if (this._storedError) {
return Promise.reject(this._reason); return Promise.reject(this._storedError);
} }
let chunk = this._readableStream.read(); let chunk = this._readableStream.read();
@ -170,8 +169,7 @@ class BaseFullReader {
} }
_error(reason) { _error(reason) {
this._errored = true; this._storedError = reason;
this._reason = reason;
this._readCapability.resolve(); this._readCapability.resolve();
} }
@ -199,8 +197,8 @@ class BaseFullReader {
} }
// Destroy ReadableStream if already in errored state. // Destroy ReadableStream if already in errored state.
if (this._errored) { if (this._storedError) {
this._readableStream.destroy(this._reason); this._readableStream.destroy(this._storedError);
} }
} }
} }
@ -209,8 +207,7 @@ class BaseRangeReader {
constructor(stream) { constructor(stream) {
this._url = stream.url; this._url = stream.url;
this._done = false; this._done = false;
this._errored = false; this._storedError = null;
this._reason = null;
this.onProgress = null; this.onProgress = null;
this._loaded = 0; this._loaded = 0;
this._readableStream = null; this._readableStream = null;
@ -228,8 +225,8 @@ class BaseRangeReader {
if (this._done) { if (this._done) {
return Promise.resolve({ value: undefined, done: true, }); return Promise.resolve({ value: undefined, done: true, });
} }
if (this._errored) { if (this._storedError) {
return Promise.reject(this._reason); return Promise.reject(this._storedError);
} }
let chunk = this._readableStream.read(); let chunk = this._readableStream.read();
@ -258,8 +255,7 @@ class BaseRangeReader {
} }
_error(reason) { _error(reason) {
this._errored = true; this._storedError = reason;
this._reason = reason;
this._readCapability.resolve(); this._readCapability.resolve();
} }
@ -281,8 +277,8 @@ class BaseRangeReader {
}); });
// Destroy readableStream if already in errored state. // Destroy readableStream if already in errored state.
if (this._errored) { if (this._storedError) {
this._readableStream.destroy(this._reason); this._readableStream.destroy(this._storedError);
} }
} }
} }
@ -339,8 +335,7 @@ class PDFNodeStreamFullReader extends BaseFullReader {
} }
this._request.on('error', (reason) => { this._request.on('error', (reason) => {
this._errored = true; this._storedError = reason;
this._reason = reason;
this._headersCapability.reject(reason); this._headersCapability.reject(reason);
}); });
// Note: `request.end(data)` is used to write `data` to request body // Note: `request.end(data)` is used to write `data` to request body
@ -378,8 +373,7 @@ class PDFNodeStreamRangeReader extends BaseRangeReader {
} }
this._request.on('error', (reason) => { this._request.on('error', (reason) => {
this._errored = true; this._storedError = reason;
this._reason = reason;
}); });
this._request.end(); this._request.end();
} }
@ -398,8 +392,7 @@ class PDFNodeStreamFsFullReader extends BaseFullReader {
fs.lstat(path, (error, stat) => { fs.lstat(path, (error, stat) => {
if (error) { if (error) {
this._errored = true; this._storedError = error;
this._reason = error;
this._headersCapability.reject(error); this._headersCapability.reject(error);
return; return;
} }

View File

@ -108,6 +108,7 @@ exports.RenderingCancelledException =
exports.getFilenameFromUrl = pdfjsDisplayDOMUtils.getFilenameFromUrl; exports.getFilenameFromUrl = pdfjsDisplayDOMUtils.getFilenameFromUrl;
exports.LinkTarget = pdfjsDisplayDOMUtils.LinkTarget; exports.LinkTarget = pdfjsDisplayDOMUtils.LinkTarget;
exports.addLinkAttributes = pdfjsDisplayDOMUtils.addLinkAttributes; exports.addLinkAttributes = pdfjsDisplayDOMUtils.addLinkAttributes;
exports.loadScript = pdfjsDisplayDOMUtils.loadScript;
exports.GlobalWorkerOptions = pdfjsDisplayWorkerOptions.GlobalWorkerOptions; exports.GlobalWorkerOptions = pdfjsDisplayWorkerOptions.GlobalWorkerOptions;
exports.apiCompatibilityParams = exports.apiCompatibilityParams =
pdfjsDisplayAPICompatibility.apiCompatibilityParams; pdfjsDisplayAPICompatibility.apiCompatibilityParams;

View File

@ -908,21 +908,6 @@ var Util = (function UtilClosure() {
} }
}; };
Util.loadScript = function Util_loadScript(src, callback) {
var script = document.createElement('script');
var loaded = false;
script.setAttribute('src', src);
if (callback) {
script.onload = function() {
if (!loaded) {
callback();
}
loaded = true;
};
}
document.getElementsByTagName('head')[0].appendChild(script);
};
return Util; return Util;
})(); })();

View File

@ -164,7 +164,9 @@ describe('api', function() {
}); });
it('creates pdf doc from non-existent URL', function(done) { it('creates pdf doc from non-existent URL', function(done) {
if (isNodeJS()) { if (isNodeJS()) {
pending('XMLHttpRequest is not supported in Node.js.'); pending('Fix `src/display/node_stream.js` to actually throw ' +
'a `MissingPDFException` in all cases where a PDF file ' +
'cannot be found, such that this test-case can be enabled.');
} }
var loadingTask = getDocument( var loadingTask = getDocument(
buildGetDocumentParams('non-existent.pdf')); buildGetDocumentParams('non-existent.pdf'));

View File

@ -22,8 +22,8 @@ import {
} from './ui_utils'; } from './ui_utils';
import { import {
build, createBlob, getDocument, getFilenameFromUrl, GlobalWorkerOptions, build, createBlob, getDocument, getFilenameFromUrl, GlobalWorkerOptions,
InvalidPDFException, LinkTarget, MissingPDFException, OPS, PDFWorker, shadow, InvalidPDFException, LinkTarget, loadScript, MissingPDFException, OPS,
UnexpectedResponseException, UNSUPPORTED_FEATURES, version PDFWorker, shadow, UnexpectedResponseException, UNSUPPORTED_FEATURES, version
} from 'pdfjs-lib'; } from 'pdfjs-lib';
import { CursorTool, PDFCursorTools } from './pdf_cursor_tools'; import { CursorTool, PDFCursorTools } from './pdf_cursor_tools';
import { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue'; import { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue';
@ -1551,11 +1551,11 @@ if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {
} }
function loadFakeWorker() { function loadFakeWorker() {
return new Promise(function(resolve, reject) {
if (!GlobalWorkerOptions.workerSrc) { if (!GlobalWorkerOptions.workerSrc) {
GlobalWorkerOptions.workerSrc = AppOptions.get('workerSrc'); GlobalWorkerOptions.workerSrc = AppOptions.get('workerSrc');
} }
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) { if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {
return new Promise(function(resolve, reject) {
if (typeof SystemJS === 'object') { if (typeof SystemJS === 'object') {
SystemJS.import('pdfjs/core/worker').then((worker) => { SystemJS.import('pdfjs/core/worker').then((worker) => {
window.pdfjsWorker = worker; window.pdfjsWorker = worker;
@ -1568,37 +1568,18 @@ function loadFakeWorker() {
reject(new Error( reject(new Error(
'SystemJS or CommonJS must be used to load fake worker.')); 'SystemJS or CommonJS must be used to load fake worker.'));
} }
} else {
let script = document.createElement('script');
script.src = PDFWorker.getWorkerSrc();
script.onload = function() {
resolve();
};
script.onerror = function() {
reject(new Error(`Cannot load fake worker at: ${script.src}`));
};
(document.head || document.documentElement).appendChild(script);
}
}); });
}
return loadScript(PDFWorker.getWorkerSrc());
} }
function loadAndEnablePDFBug(enabledTabs) { function loadAndEnablePDFBug(enabledTabs) {
return new Promise(function (resolve, reject) {
let appConfig = PDFViewerApplication.appConfig; let appConfig = PDFViewerApplication.appConfig;
let script = document.createElement('script'); return loadScript(appConfig.debuggerScriptPath).then(function() {
script.src = appConfig.debuggerScriptPath;
script.onload = function () {
PDFBug.enable(enabledTabs); PDFBug.enable(enabledTabs);
PDFBug.init({ PDFBug.init({
OPS, OPS,
}, appConfig.mainContainer); }, appConfig.mainContainer);
resolve();
};
script.onerror = function () {
reject(new Error('Cannot load debugger at ' + script.src));
};
(document.getElementsByTagName('head')[0] || document.body).
appendChild(script);
}); });
} }