Merge pull request #9385 from Snuffleupagus/rm-SINGLE_FILE

[api-major] Remove the `SINGLE_FILE` build target and the `PDFJS.disableWorker` option
This commit is contained in:
Jonas Jenwald 2018-02-02 09:21:58 +01:00 committed by GitHub
commit 29d77dedad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 86 additions and 106 deletions

View File

@ -10,9 +10,6 @@ var pdfPath = '../helloworld/helloworld.pdf';
// Setting worker path to worker bundle. // Setting worker path to worker bundle.
PDFJS.workerSrc = '../../build/browserify/pdf.worker.bundle.js'; PDFJS.workerSrc = '../../build/browserify/pdf.worker.bundle.js';
// It is also possible to disable workers via `PDFJS.disableWorker = true`,
// however that might degrade the UI performance in web browsers.
// Loading a document. // Loading a document.
var loadingTask = PDFJS.getDocument(pdfPath); var loadingTask = PDFJS.getDocument(pdfPath);
loadingTask.promise.then(function (pdfDocument) { loadingTask.promise.then(function (pdfDocument) {

View File

@ -19,13 +19,6 @@
// //
var url = './helloworld.pdf'; var url = './helloworld.pdf';
//
// Disable workers to avoid yet another cross-origin issue (workers need
// the URL of the script to be loaded, and dynamically loading a cross-origin
// script does not work).
//
// PDFJS.disableWorker = true;
// //
// The workerSrc property shall be specified. // The workerSrc property shall be specified.
// //

View File

@ -31,12 +31,6 @@
'MDAwIG4gCjAwMDAwMDAzODAgMDAwMDAgbiAKdHJhaWxlcgo8PAogIC9TaXplIDYKICAvUm9v' + 'MDAwIG4gCjAwMDAwMDAzODAgMDAwMDAgbiAKdHJhaWxlcgo8PAogIC9TaXplIDYKICAvUm9v' +
'dCAxIDAgUgo+PgpzdGFydHhyZWYKNDkyCiUlRU9G'); 'dCAxIDAgUgo+PgpzdGFydHhyZWYKNDkyCiUlRU9G');
// Disable workers to avoid yet another cross-origin issue (workers need
// the URL of the script to be loaded, and dynamically loading a cross-origin
// script does not work).
//
// PDFJS.disableWorker = true;
// //
// The workerSrc property shall be specified. // The workerSrc property shall be specified.
// //

View File

@ -28,14 +28,6 @@
// //
var url = '../../web/compressed.tracemonkey-pldi-09.pdf'; var url = '../../web/compressed.tracemonkey-pldi-09.pdf';
//
// Disable workers to avoid yet another cross-origin issue (workers need
// the URL of the script to be loaded, and dynamically loading a cross-origin
// script does not work).
//
// PDFJS.disableWorker = true;
// //
// In cases when the pdf.worker.js is located at the different folder than the // In cases when the pdf.worker.js is located at the different folder than the
// pdf.js's one, or the pdf.js is executed via eval(), the workerSrc property // pdf.js's one, or the pdf.js is executed via eval(), the workerSrc property

View File

@ -10,9 +10,6 @@ var pdfPath = '../helloworld/helloworld.pdf';
// Setting worker path to worker bundle. // Setting worker path to worker bundle.
pdfjsLib.PDFJS.workerSrc = '../../build/webpack/pdf.worker.bundle.js'; pdfjsLib.PDFJS.workerSrc = '../../build/webpack/pdf.worker.bundle.js';
// It is also possible to disable workers via `PDFJS.disableWorker = true`,
// however that might degrade the UI performance in web browsers.
// Loading a document. // Loading a document.
var loadingTask = pdfjsLib.getDocument(pdfPath); var loadingTask = pdfjsLib.getDocument(pdfPath);
loadingTask.promise.then(function (pdfDocument) { loadingTask.promise.then(function (pdfDocument) {

View File

@ -19,8 +19,6 @@ var PdfjsWorker = require('worker-loader!./build/pdf.worker.js');
if (typeof window !== 'undefined' && 'Worker' in window) { if (typeof window !== 'undefined' && 'Worker' in window) {
pdfjs.PDFJS.workerPort = new PdfjsWorker(); pdfjs.PDFJS.workerPort = new PdfjsWorker();
} else {
pdfjs.PDFJS.disableWorker = true;
} }
module.exports = pdfjs; module.exports = pdfjs;

View File

@ -48,7 +48,6 @@ var BASELINE_DIR = BUILD_DIR + 'baseline/';
var MOZCENTRAL_BASELINE_DIR = BUILD_DIR + 'mozcentral.baseline/'; var MOZCENTRAL_BASELINE_DIR = BUILD_DIR + 'mozcentral.baseline/';
var GENERIC_DIR = BUILD_DIR + 'generic/'; var GENERIC_DIR = BUILD_DIR + 'generic/';
var COMPONENTS_DIR = BUILD_DIR + 'components/'; var COMPONENTS_DIR = BUILD_DIR + 'components/';
var SINGLE_FILE_DIR = BUILD_DIR + 'singlefile/';
var MINIFIED_DIR = BUILD_DIR + 'minified/'; var MINIFIED_DIR = BUILD_DIR + 'minified/';
var FIREFOX_BUILD_DIR = BUILD_DIR + 'firefox/'; var FIREFOX_BUILD_DIR = BUILD_DIR + 'firefox/';
var CHROME_BUILD_DIR = BUILD_DIR + 'chromium/'; var CHROME_BUILD_DIR = BUILD_DIR + 'chromium/';
@ -79,7 +78,6 @@ var DEFINES = {
MOZCENTRAL: false, MOZCENTRAL: false,
CHROME: false, CHROME: false,
MINIFIED: false, MINIFIED: false,
SINGLE_FILE: false,
COMPONENTS: false, COMPONENTS: false,
LIB: false, LIB: false,
SKIP_BABEL: false, SKIP_BABEL: false,
@ -235,10 +233,6 @@ function createBundle(defines) {
var mainAMDName = 'pdfjs-dist/build/pdf'; var mainAMDName = 'pdfjs-dist/build/pdf';
var mainOutputName = 'pdf.js'; var mainOutputName = 'pdf.js';
if (defines.SINGLE_FILE) {
mainAMDName = 'pdfjs-dist/build/pdf.combined';
mainOutputName = 'pdf.combined.js';
}
var mainFileConfig = createWebpackConfig(defines, { var mainFileConfig = createWebpackConfig(defines, {
filename: mainOutputName, filename: mainOutputName,
@ -250,9 +244,6 @@ function createBundle(defines) {
.pipe(webpack2Stream(mainFileConfig)) .pipe(webpack2Stream(mainFileConfig))
.pipe(replaceWebpackRequire()) .pipe(replaceWebpackRequire())
.pipe(replaceJSRootName(mainAMDName)); .pipe(replaceJSRootName(mainAMDName));
if (defines.SINGLE_FILE) {
return mainOutput; // don't need a worker file.
}
var workerAMDName = 'pdfjs-dist/build/pdf.worker'; var workerAMDName = 'pdfjs-dist/build/pdf.worker';
var workerOutputName = 'pdf.worker.js'; var workerOutputName = 'pdf.worker.js';
@ -634,18 +625,6 @@ gulp.task('components', ['buildnumber'], function () {
]); ]);
}); });
gulp.task('singlefile', ['buildnumber'], function () {
console.log();
console.log('### Creating singlefile build');
var defines = builder.merge(DEFINES, { SINGLE_FILE: true, });
var SINGLE_FILE_BUILD_DIR = SINGLE_FILE_DIR + 'build/';
rimraf.sync(SINGLE_FILE_DIR);
return createBundle(defines).pipe(gulp.dest(SINGLE_FILE_BUILD_DIR));
});
gulp.task('minified-pre', ['buildnumber', 'locale'], function () { gulp.task('minified-pre', ['buildnumber', 'locale'], function () {
console.log(); console.log();
console.log('### Creating minified viewer'); console.log('### Creating minified viewer');
@ -1275,9 +1254,7 @@ gulp.task('gh-pages-git', ['gh-pages-prepare', 'wintersmith'], function () {
gulp.task('web', ['gh-pages-prepare', 'wintersmith', 'gh-pages-git']); gulp.task('web', ['gh-pages-prepare', 'wintersmith', 'gh-pages-git']);
gulp.task('dist-pre', gulp.task('dist-pre', ['generic', 'components', 'lib', 'minified'], function() {
['generic', 'singlefile', 'components', 'lib', 'minified'],
function () {
var VERSION = getVersionJSON().version; var VERSION = getVersionJSON().version;
console.log(); console.log();
@ -1359,8 +1336,6 @@ gulp.task('dist-pre',
GENERIC_DIR + 'build/pdf.js.map', GENERIC_DIR + 'build/pdf.js.map',
GENERIC_DIR + 'build/pdf.worker.js', GENERIC_DIR + 'build/pdf.worker.js',
GENERIC_DIR + 'build/pdf.worker.js.map', GENERIC_DIR + 'build/pdf.worker.js.map',
SINGLE_FILE_DIR + 'build/pdf.combined.js',
SINGLE_FILE_DIR + 'build/pdf.combined.js.map',
SRC_DIR + 'pdf.worker.entry.js', SRC_DIR + 'pdf.worker.entry.js',
]).pipe(gulp.dest(DIST_DIR + 'build/')), ]).pipe(gulp.dest(DIST_DIR + 'build/')),
gulp.src(MINIFIED_DIR + 'build/pdf.js') gulp.src(MINIFIED_DIR + 'build/pdf.js')

View File

@ -46,8 +46,7 @@ var pdfjsFilePath =
var fakeWorkerFilesLoader = null; var fakeWorkerFilesLoader = null;
var useRequireEnsure = false; var useRequireEnsure = false;
if (typeof PDFJSDev !== 'undefined' && if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {
PDFJSDev.test('GENERIC && !SINGLE_FILE')) {
// For GENERIC build we need add support of different fake file loaders // For GENERIC build we need add support of different fake file loaders
// for different frameworks. // for different frameworks.
if (typeof window === 'undefined') { if (typeof window === 'undefined') {
@ -1217,39 +1216,52 @@ var PDFWorker = (function PDFWorkerClosure() {
throw new Error('No PDFJS.workerSrc specified'); throw new Error('No PDFJS.workerSrc specified');
} }
function getMainThreadWorkerMessageHandler() {
if (typeof window === 'undefined') {
return null;
}
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {
return (window.pdfjsNonProductionPdfWorker &&
window.pdfjsNonProductionPdfWorker.WorkerMessageHandler);
}
// PRODUCTION
return (window.pdfjsDistBuildPdfWorker &&
window.pdfjsDistBuildPdfWorker.WorkerMessageHandler);
}
let fakeWorkerFilesLoadedCapability; let fakeWorkerFilesLoadedCapability;
// Loads worker code into main thread. // Loads worker code into main thread.
function setupFakeWorkerGlobal() { function setupFakeWorkerGlobal() {
var WorkerMessageHandler;
if (fakeWorkerFilesLoadedCapability) { if (fakeWorkerFilesLoadedCapability) {
return fakeWorkerFilesLoadedCapability.promise; return fakeWorkerFilesLoadedCapability.promise;
} }
fakeWorkerFilesLoadedCapability = createPromiseCapability(); fakeWorkerFilesLoadedCapability = createPromiseCapability();
// In the developer build load worker_loader which in turn loads all the
let mainWorkerMessageHandler = getMainThreadWorkerMessageHandler();
if (mainWorkerMessageHandler) {
// The worker was already loaded using a `<script>` tag.
fakeWorkerFilesLoadedCapability.resolve(mainWorkerMessageHandler);
return fakeWorkerFilesLoadedCapability.promise;
}
// In the developer build load worker_loader.js which in turn loads all the
// other files and resolves the promise. In production only the // other files and resolves the promise. In production only the
// pdf.worker.js file is needed. // pdf.worker.js file is needed.
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) { if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {
if (typeof SystemJS === 'object') { if (typeof SystemJS === 'object') {
SystemJS.import('pdfjs/core/worker').then((worker) => { SystemJS.import('pdfjs/core/worker').then((worker) => {
WorkerMessageHandler = worker.WorkerMessageHandler; fakeWorkerFilesLoadedCapability.resolve(worker.WorkerMessageHandler);
fakeWorkerFilesLoadedCapability.resolve(WorkerMessageHandler);
}); });
} else if (typeof require === 'function') { } else if (typeof require === 'function') {
var worker = require('../core/worker.js'); let worker = require('../core/worker.js');
WorkerMessageHandler = worker.WorkerMessageHandler; fakeWorkerFilesLoadedCapability.resolve(worker.WorkerMessageHandler);
fakeWorkerFilesLoadedCapability.resolve(WorkerMessageHandler);
} else { } else {
throw new Error( throw new Error(
'SystemJS or CommonJS must be used to load fake worker.'); 'SystemJS or CommonJS must be used to load fake worker.');
} }
} else if (PDFJSDev.test('SINGLE_FILE')) {
var pdfjsCoreWorker = require('../core/worker.js');
WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;
fakeWorkerFilesLoadedCapability.resolve(WorkerMessageHandler);
} else { } else {
var loader = fakeWorkerFilesLoader || function (callback) { let loader = fakeWorkerFilesLoader || function(callback) {
Util.loadScript(getWorkerSrc(), function () { Util.loadScript(getWorkerSrc(), function() {
callback(window.pdfjsDistBuildPdfWorker.WorkerMessageHandler); callback(window.pdfjsDistBuildPdfWorker.WorkerMessageHandler);
}); });
}; };
@ -1320,9 +1332,8 @@ var PDFWorker = (function PDFWorkerClosure() {
// all requirements to run parts of pdf.js in a web worker. // all requirements to run parts of pdf.js in a web worker.
// Right now, the requirement is, that an Uint8Array is still an // Right now, the requirement is, that an Uint8Array is still an
// Uint8Array as it arrives on the worker. (Chrome added this with v.15.) // Uint8Array as it arrives on the worker. (Chrome added this with v.15.)
if ((typeof PDFJSDev === 'undefined' || !PDFJSDev.test('SINGLE_FILE')) && if (typeof Worker !== 'undefined' && !isWorkerDisabled &&
!isWorkerDisabled && !getDefaultSetting('disableWorker') && !getMainThreadWorkerMessageHandler()) {
typeof Worker !== 'undefined') {
var workerSrc = getWorkerSrc(); var workerSrc = getWorkerSrc();
try { try {
@ -1433,7 +1444,7 @@ var PDFWorker = (function PDFWorkerClosure() {
}, },
_setupFakeWorker: function PDFWorker_setupFakeWorker() { _setupFakeWorker: function PDFWorker_setupFakeWorker() {
if (!isWorkerDisabled && !getDefaultSetting('disableWorker')) { if (!isWorkerDisabled) {
warn('Setting up fake worker.'); warn('Setting up fake worker.');
isWorkerDisabled = true; isWorkerDisabled = true;
} }
@ -1491,6 +1502,10 @@ var PDFWorker = (function PDFWorkerClosure() {
return new PDFWorker(null, port); return new PDFWorker(null, port);
}; };
PDFWorker.getWorkerSrc = function() {
return getWorkerSrc();
};
return PDFWorker; return PDFWorker;
})(); })();

View File

@ -361,8 +361,6 @@ function getDefaultSetting(id) {
return globalSettings ? globalSettings.workerPort : null; return globalSettings ? globalSettings.workerPort : null;
case 'workerSrc': case 'workerSrc':
return globalSettings ? globalSettings.workerSrc : null; return globalSettings ? globalSettings.workerSrc : null;
case 'disableWorker':
return globalSettings ? globalSettings.disableWorker : false;
case 'maxImageSize': case 'maxImageSize':
return globalSettings ? globalSettings.maxImageSize : -1; return globalSettings ? globalSettings.maxImageSize : -1;
case 'imageResourcesPath': case 'imageResourcesPath':

View File

@ -128,15 +128,6 @@ PDFJS.disableFontFace = (PDFJS.disableFontFace === undefined ?
PDFJS.imageResourcesPath = (PDFJS.imageResourcesPath === undefined ? PDFJS.imageResourcesPath = (PDFJS.imageResourcesPath === undefined ?
'' : PDFJS.imageResourcesPath); '' : PDFJS.imageResourcesPath);
/**
* Disable the web worker and run all code on the main thread. This will
* happen automatically if the browser doesn't support workers or sending
* typed arrays to workers.
* @var {boolean}
*/
PDFJS.disableWorker = (PDFJS.disableWorker === undefined ?
false : PDFJS.disableWorker);
/** /**
* Path and filename of the worker file. Required when the worker is enabled * Path and filename of the worker file. Required when the worker is enabled
* in development mode. If unspecified in the production build, the worker * in development mode. If unspecified in the production build, the worker
@ -148,8 +139,7 @@ PDFJS.disableWorker = (PDFJS.disableWorker === undefined ?
PDFJS.workerSrc = (PDFJS.workerSrc === undefined ? null : PDFJS.workerSrc); PDFJS.workerSrc = (PDFJS.workerSrc === undefined ? null : PDFJS.workerSrc);
/** /**
* Defines global port for worker process. Overrides workerSrc and * Defines global port for worker process. Overrides `workerSrc` setting.
* disableWorker setting.
*/ */
PDFJS.workerPort = (PDFJS.workerPort === undefined ? null : PDFJS.workerPort); PDFJS.workerPort = (PDFJS.workerPort === undefined ? null : PDFJS.workerPort);

View File

@ -25,8 +25,7 @@ var SVGGraphics = function() {
throw new Error('Not implemented: SVGGraphics'); throw new Error('Not implemented: SVGGraphics');
}; };
if (typeof PDFJSDev === 'undefined' || if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {
PDFJSDev.test('GENERIC || SINGLE_FILE')) {
var SVG_DEFAULTS = { var SVG_DEFAULTS = {
fontStyle: 'normal', fontStyle: 'normal',

View File

@ -29,8 +29,7 @@ var pdfjsDisplayAnnotationLayer = require('./display/annotation_layer.js');
var pdfjsDisplayDOMUtils = require('./display/dom_utils.js'); var pdfjsDisplayDOMUtils = require('./display/dom_utils.js');
var pdfjsDisplaySVG = require('./display/svg.js'); var pdfjsDisplaySVG = require('./display/svg.js');
if (typeof PDFJSDev === 'undefined' || if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {
!PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {
const isNodeJS = require('./shared/is_node.js'); const isNodeJS = require('./shared/is_node.js');
if (isNodeJS()) { if (isNodeJS()) {
let PDFNodeStream = require('./display/node_stream.js').PDFNodeStream; let PDFNodeStream = require('./display/node_stream.js').PDFNodeStream;
@ -43,7 +42,7 @@ if (typeof PDFJSDev === 'undefined' ||
pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => { pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => {
return new PDFFetchStream(params); return new PDFFetchStream(params);
}); });
} else { } else {
let PDFNetworkStream = require('./display/network.js').PDFNetworkStream; let PDFNetworkStream = require('./display/network.js').PDFNetworkStream;
pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => { pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => {
return new PDFNetworkStream(params); return new PDFNetworkStream(params);

View File

@ -24,7 +24,7 @@ import {
DOMCanvasFactory, RenderingCancelledException DOMCanvasFactory, RenderingCancelledException
} from '../../src/display/dom_utils'; } from '../../src/display/dom_utils';
import { import {
getDocument, PDFDocumentProxy, PDFPageProxy getDocument, PDFDocumentProxy, PDFPageProxy, PDFWorker
} from '../../src/display/api'; } from '../../src/display/api';
import isNodeJS from '../../src/shared/is_node'; import isNodeJS from '../../src/shared/is_node';
import { PDFJS } from '../../src/display/global'; import { PDFJS } from '../../src/display/global';
@ -122,16 +122,14 @@ describe('api', function() {
path: TEST_PDFS_PATH.node + basicApiFileName, path: TEST_PDFS_PATH.node + basicApiFileName,
}); });
} else { } else {
var nonBinaryRequest = PDFJS.disableWorker; let nonBinaryRequest = false;
var request = new XMLHttpRequest(); let request = new XMLHttpRequest();
request.open('GET', TEST_PDFS_PATH.dom + basicApiFileName, false); request.open('GET', TEST_PDFS_PATH.dom + basicApiFileName, false);
if (!nonBinaryRequest) { try {
try { request.responseType = 'arraybuffer';
request.responseType = 'arraybuffer'; nonBinaryRequest = request.responseType !== 'arraybuffer';
nonBinaryRequest = request.responseType !== 'arraybuffer'; } catch (e) {
} catch (e) { nonBinaryRequest = true;
nonBinaryRequest = true;
}
} }
if (nonBinaryRequest && request.overrideMimeType) { if (nonBinaryRequest && request.overrideMimeType) {
request.overrideMimeType('text/plain; charset=x-user-defined'); request.overrideMimeType('text/plain; charset=x-user-defined');
@ -405,6 +403,11 @@ describe('api', function() {
done.fail(reason); done.fail(reason);
}); });
}); });
it('gets current workerSrc', function() {
let workerSrc = PDFWorker.getWorkerSrc();
expect(typeof workerSrc).toEqual('string');
expect(workerSrc).toEqual(PDFJS.workerSrc);
});
}); });
describe('PDFDocument', function() { describe('PDFDocument', function() {
var loadingTask; var loadingTask;

View File

@ -22,8 +22,8 @@ import {
} from './ui_utils'; } from './ui_utils';
import { import {
build, createBlob, getDocument, getFilenameFromUrl, InvalidPDFException, build, createBlob, getDocument, getFilenameFromUrl, InvalidPDFException,
MissingPDFException, OPS, PDFJS, shadow, UnexpectedResponseException, MissingPDFException, OPS, PDFJS, PDFWorker, shadow,
UNSUPPORTED_FEATURES, version 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';
@ -285,8 +285,9 @@ let PDFViewerApplication = {
let hash = document.location.hash.substring(1); let hash = document.location.hash.substring(1);
let hashParams = parseQueryString(hash); let hashParams = parseQueryString(hash);
if ('disableworker' in hashParams) { if ('disableworker' in hashParams &&
PDFJS.disableWorker = (hashParams['disableworker'] === 'true'); hashParams['disableworker'] === 'true') {
waitOn.push(loadFakeWorker());
} }
if ('disablerange' in hashParams) { if ('disablerange' in hashParams) {
PDFJS.disableRange = (hashParams['disablerange'] === 'true'); PDFJS.disableRange = (hashParams['disablerange'] === 'true');
@ -1512,6 +1513,35 @@ if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {
}; };
} }
function loadFakeWorker() {
return new Promise(function(resolve, reject) {
if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {
if (typeof SystemJS === 'object') {
SystemJS.import('pdfjs/core/worker').then((worker) => {
window.pdfjsNonProductionPdfWorker = worker;
resolve();
});
} else if (typeof require === 'function') {
window.pdfjsNonProductionPdfWorker = require('../src/core/worker.js');
resolve();
} else {
reject(new Error(
'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);
}
});
}
function loadAndEnablePDFBug(enabledTabs) { function loadAndEnablePDFBug(enabledTabs) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
let appConfig = PDFViewerApplication.appConfig; let appConfig = PDFViewerApplication.appConfig;