2
0
Эх сурвалжийг харах

PDF.js version 2.0.419 - See mozilla/pdf.js@c33bf800cc87941cc681c3c54279ab1b9745650d

pdfjsbot 7 жил өмнө
parent
commit
161f7b08ef

+ 1 - 1
bower.json

@@ -1,6 +1,6 @@
 {
   "name": "pdfjs-dist",
-  "version": "2.0.402",
+  "version": "2.0.419",
   "main": [
     "build/pdf.js",
     "build/pdf.worker.js"

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 430 - 4789
build/pdf.js


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/pdf.js.map


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/pdf.min.js


+ 7 - 26
build/pdf.worker.js

@@ -22315,8 +22315,8 @@ exports.PostScriptCompiler = PostScriptCompiler;
 "use strict";
 
 
-var pdfjsVersion = '2.0.402';
-var pdfjsBuild = '401f3a9d';
+var pdfjsVersion = '2.0.419';
+var pdfjsBuild = 'c33bf800';
 var pdfjsCoreWorker = __w_pdfjs_require__(74);
 exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;
 
@@ -22529,7 +22529,7 @@ var WorkerMessageHandler = {
     var cancelXHRs = null;
     var WorkerTasks = [];
     var apiVersion = docParams.apiVersion;
-    var workerVersion = '2.0.402';
+    var workerVersion = '2.0.419';
     if (apiVersion !== null && apiVersion !== workerVersion) {
       throw new Error('The API version "' + apiVersion + '" does not match ' + ('the Worker version "' + workerVersion + '".'));
     }
@@ -22720,7 +22720,7 @@ var WorkerMessageHandler = {
       ensureNotTerminated();
       var evaluatorOptions = {
         forceDataSchema: data.disableCreateObjectURL,
-        maxImageSize: data.maxImageSize === undefined ? -1 : data.maxImageSize,
+        maxImageSize: data.maxImageSize,
         disableFontFace: data.disableFontFace,
         nativeImageDecoderSupport: data.nativeImageDecoderSupport,
         ignoreErrors: data.ignoreErrors,
@@ -22925,19 +22925,11 @@ exports.WorkerMessageHandler = WorkerMessageHandler;
 
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-if (typeof PDFJS === 'undefined' || !PDFJS.compatibilityChecked) {
-  var globalScope = __w_pdfjs_require__(76);
+var globalScope = __w_pdfjs_require__(76);
+if (!globalScope._pdfjsCompatibilityChecked) {
+  globalScope._pdfjsCompatibilityChecked = true;
   var isNodeJS = __w_pdfjs_require__(44);
-  var userAgent = typeof navigator !== 'undefined' && navigator.userAgent || '';
-  var isIOSChrome = userAgent.indexOf('CriOS') >= 0;
-  var isIE = userAgent.indexOf('Trident') >= 0;
-  var isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent);
-  var isSafari = /Safari\//.test(userAgent) && !/(Chrome\/|Android\s)/.test(userAgent);
   var hasDOM = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && (typeof document === 'undefined' ? 'undefined' : _typeof(document)) === 'object';
-  if (typeof PDFJS === 'undefined') {
-    globalScope.PDFJS = {};
-  }
-  PDFJS.compatibilityChecked = true;
   (function checkNodeBtoa() {
     if (globalScope.btoa || !isNodeJS()) {
       return;
@@ -22954,17 +22946,6 @@ if (typeof PDFJS === 'undefined' || !PDFJS.compatibilityChecked) {
       return Buffer.from(input, 'base64').toString('binary');
     };
   })();
-  (function checkOnBlobSupport() {
-    if (isIE || isIOSChrome) {
-      PDFJS.disableCreateObjectURL = true;
-    }
-  })();
-  (function checkRangeRequests() {
-    if (isSafari || isIOS) {
-      PDFJS.disableRange = true;
-      PDFJS.disableStream = true;
-    }
-  })();
   (function checkCurrentScript() {
     if (!hasDOM) {
       return;

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/pdf.worker.js.map


Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
build/pdf.worker.min.js


+ 2 - 2
lib/core/worker.js

@@ -223,7 +223,7 @@ var WorkerMessageHandler = {
     var cancelXHRs = null;
     var WorkerTasks = [];
     var apiVersion = docParams.apiVersion;
-    var workerVersion = '2.0.402';
+    var workerVersion = '2.0.419';
     if (apiVersion !== null && apiVersion !== workerVersion) {
       throw new Error('The API version "' + apiVersion + '" does not match ' + ('the Worker version "' + workerVersion + '".'));
     }
@@ -414,7 +414,7 @@ var WorkerMessageHandler = {
       ensureNotTerminated();
       var evaluatorOptions = {
         forceDataSchema: data.disableCreateObjectURL,
-        maxImageSize: data.maxImageSize === undefined ? -1 : data.maxImageSize,
+        maxImageSize: data.maxImageSize,
         disableFontFace: data.disableFontFace,
         nativeImageDecoderSupport: data.nativeImageDecoderSupport,
         ignoreErrors: data.ignoreErrors,

+ 80 - 27
lib/display/api.js

@@ -36,6 +36,8 @@ var _dom_utils = require('./dom_utils');
 
 var _font_loader = require('./font_loader');
 
+var _api_compatibility = require('./api_compatibility');
+
 var _canvas = require('./canvas');
 
 var _global_scope = require('../shared/global_scope');
@@ -108,7 +110,7 @@ function getDocument(src) {
     }
     source = src;
   }
-  var params = {};
+  var params = Object.create(null);
   var rangeTransport = null;
   var worker = null;
   var CMapReaderFactory = _dom_utils.DOMCMapReaderFactory;
@@ -142,10 +144,32 @@ function getDocument(src) {
   }
   params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
   params.ignoreErrors = params.stopAtErrors !== true;
-  var nativeImageDecoderValues = Object.values(_util.NativeImageDecoding);
-  if (params.nativeImageDecoderSupport === undefined || !nativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) {
+  params.pdfBug = params.pdfBug === true;
+  var NativeImageDecoderValues = Object.values(_util.NativeImageDecoding);
+  if (params.nativeImageDecoderSupport === undefined || !NativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) {
     params.nativeImageDecoderSupport = _util.NativeImageDecoding.DECODE;
   }
+  if (!Number.isInteger(params.maxImageSize)) {
+    params.maxImageSize = -1;
+  }
+  if (typeof params.isEvalSupported !== 'boolean') {
+    params.isEvalSupported = true;
+  }
+  if (typeof params.disableFontFace !== 'boolean') {
+    params.disableFontFace = false;
+  }
+  if (typeof params.disableRange !== 'boolean') {
+    params.disableRange = _api_compatibility.apiCompatibilityParams.disableRange || false;
+  }
+  if (typeof params.disableStream !== 'boolean') {
+    params.disableStream = _api_compatibility.apiCompatibilityParams.disableStream || false;
+  }
+  if (typeof params.disableAutoFetch !== 'boolean') {
+    params.disableAutoFetch = false;
+  }
+  if (typeof params.disableCreateObjectURL !== 'boolean') {
+    params.disableCreateObjectURL = _api_compatibility.apiCompatibilityParams.disableCreateObjectURL || false;
+  }
   (0, _util.setVerbosityLevel)(params.verbosity);
   if (!worker) {
     var workerParams = {
@@ -172,13 +196,26 @@ function getDocument(src) {
       }
       var networkStream = void 0;
       if (rangeTransport) {
-        networkStream = new _transport_stream.PDFDataTransportStream(params, rangeTransport);
+        networkStream = new _transport_stream.PDFDataTransportStream({
+          length: params.length,
+          initialData: params.initialData,
+          disableRange: params.disableRange,
+          disableStream: params.disableStream
+        }, rangeTransport);
       } else if (!params.data) {
-        networkStream = createPDFNetworkStream(params);
+        networkStream = createPDFNetworkStream({
+          url: params.url,
+          length: params.length,
+          httpHeaders: params.httpHeaders,
+          withCredentials: params.withCredentials,
+          rangeChunkSize: params.rangeChunkSize,
+          disableRange: params.disableRange,
+          disableStream: params.disableStream
+        });
       }
       var messageHandler = new _util.MessageHandler(docId, workerId, worker.port);
       messageHandler.postMessageTransfers = worker.postMessageTransfers;
-      var transport = new WorkerTransport(messageHandler, task, networkStream, CMapReaderFactory);
+      var transport = new WorkerTransport(messageHandler, task, networkStream, params, CMapReaderFactory);
       task._transport = transport;
       messageHandler.send('Ready', null);
     });
@@ -189,17 +226,13 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
   if (worker.destroyed) {
     return Promise.reject(new Error('Worker was destroyed'));
   }
-  var apiVersion = '2.0.402';
-  source.disableRange = (0, _dom_utils.getDefaultSetting)('disableRange');
-  source.disableAutoFetch = (0, _dom_utils.getDefaultSetting)('disableAutoFetch');
-  source.disableStream = (0, _dom_utils.getDefaultSetting)('disableStream');
   if (pdfDataRangeTransport) {
     source.length = pdfDataRangeTransport.length;
     source.initialData = pdfDataRangeTransport.initialData;
   }
   return worker.messageHandler.sendWithPromise('GetDocRequest', {
     docId: docId,
-    apiVersion: apiVersion,
+    apiVersion: '2.0.419',
     source: {
       data: source.data,
       url: source.url,
@@ -208,14 +241,14 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
       rangeChunkSize: source.rangeChunkSize,
       length: source.length
     },
-    maxImageSize: (0, _dom_utils.getDefaultSetting)('maxImageSize'),
-    disableFontFace: (0, _dom_utils.getDefaultSetting)('disableFontFace'),
-    disableCreateObjectURL: (0, _dom_utils.getDefaultSetting)('disableCreateObjectURL'),
+    maxImageSize: source.maxImageSize,
+    disableFontFace: source.disableFontFace,
+    disableCreateObjectURL: source.disableCreateObjectURL,
     postMessageTransfers: worker.postMessageTransfers,
     docBaseUrl: source.docBaseUrl,
     nativeImageDecoderSupport: source.nativeImageDecoderSupport,
     ignoreErrors: source.ignoreErrors,
-    isEvalSupported: (0, _dom_utils.getDefaultSetting)('isEvalSupported')
+    isEvalSupported: source.isEvalSupported
   }).then(function (workerId) {
     if (worker.destroyed) {
       throw new Error('Worker was destroyed');
@@ -374,16 +407,22 @@ var PDFDocumentProxy = function PDFDocumentProxyClosure() {
     },
     destroy: function PDFDocumentProxy_destroy() {
       return this.loadingTask.destroy();
+    },
+    get loadingParams() {
+      return this.transport.loadingParams;
     }
   };
   return PDFDocumentProxy;
 }();
 var PDFPageProxy = function PDFPageProxyClosure() {
   function PDFPageProxy(pageIndex, pageInfo, transport) {
+    var pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+
     this.pageIndex = pageIndex;
     this.pageInfo = pageInfo;
     this.transport = transport;
-    this._stats = (0, _dom_utils.getDefaultSetting)('pdfBug') ? new _dom_utils.StatTimer() : _dom_utils.DummyStatTimer;
+    this._stats = pdfBug ? new _dom_utils.StatTimer() : _dom_utils.DummyStatTimer;
+    this._pdfBug = pdfBug;
     this.commonObjs = transport.commonObjs;
     this.objs = new PDFObjects();
     this.cleanupAfterRender = false;
@@ -467,7 +506,7 @@ var PDFPageProxy = function PDFPageProxyClosure() {
         stats.timeEnd('Rendering');
         stats.timeEnd('Overall');
       };
-      var internalRenderTask = new InternalRenderTask(complete, params, this.objs, this.commonObjs, intentState.operatorList, this.pageNumber, canvasFactory, webGLContext);
+      var internalRenderTask = new InternalRenderTask(complete, params, this.objs, this.commonObjs, intentState.operatorList, this.pageNumber, canvasFactory, webGLContext, this._pdfBug);
       internalRenderTask.useRequestAnimationFrame = renderingIntent !== 'print';
       if (!intentState.renderTasks) {
         intentState.renderTasks = [];
@@ -939,14 +978,15 @@ var PDFWorker = function PDFWorkerClosure() {
   return PDFWorker;
 }();
 var WorkerTransport = function WorkerTransportClosure() {
-  function WorkerTransport(messageHandler, loadingTask, networkStream, CMapReaderFactory) {
+  function WorkerTransport(messageHandler, loadingTask, networkStream, params, CMapReaderFactory) {
     this.messageHandler = messageHandler;
     this.loadingTask = loadingTask;
     this.commonObjs = new PDFObjects();
     this.fontLoader = new _font_loader.FontLoader(loadingTask.docId);
+    this._params = params;
     this.CMapReaderFactory = new CMapReaderFactory({
-      baseUrl: (0, _dom_utils.getDefaultSetting)('cMapUrl'),
-      isCompressed: (0, _dom_utils.getDefaultSetting)('cMapPacked')
+      baseUrl: params.cMapUrl,
+      isCompressed: params.cMapPacked
     });
     this.destroyed = false;
     this.destroyCapability = null;
@@ -1151,6 +1191,7 @@ var WorkerTransport = function WorkerTransportClosure() {
         switch (type) {
           case 'Font':
             var exportedData = data[2];
+            var params = this._params;
             if ('error' in exportedData) {
               var exportedError = exportedData.error;
               (0, _util.warn)('Error during font loading: ' + exportedError);
@@ -1158,7 +1199,7 @@ var WorkerTransport = function WorkerTransportClosure() {
               break;
             }
             var fontRegistry = null;
-            if ((0, _dom_utils.getDefaultSetting)('pdfBug') && _global_scope2.default.FontInspector && _global_scope2.default['FontInspector'].enabled) {
+            if (params.pdfBug && _global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled) {
               fontRegistry = {
                 registerFont: function registerFont(font, url) {
                   _global_scope2.default['FontInspector'].fontAdded(font, url);
@@ -1166,8 +1207,8 @@ var WorkerTransport = function WorkerTransportClosure() {
               };
             }
             var font = new _font_loader.FontFaceObject(exportedData, {
-              isEvalSupported: (0, _dom_utils.getDefaultSetting)('isEvalSupported'),
-              disableFontFace: (0, _dom_utils.getDefaultSetting)('disableFontFace'),
+              isEvalSupported: params.isEvalSupported,
+              disableFontFace: params.disableFontFace,
               fontRegistry: fontRegistry
             });
             var fontReady = function fontReady(fontObjs) {
@@ -1334,7 +1375,7 @@ var WorkerTransport = function WorkerTransportClosure() {
         if (_this13.destroyed) {
           throw new Error('Transport destroyed');
         }
-        var page = new PDFPageProxy(pageIndex, pageInfo, _this13);
+        var page = new PDFPageProxy(pageIndex, pageInfo, _this13, _this13._params.pdfBug);
         _this13.pageCache[pageIndex] = page;
         return page;
       });
@@ -1402,6 +1443,15 @@ var WorkerTransport = function WorkerTransportClosure() {
         _this15.commonObjs.clear();
         _this15.fontLoader.clear();
       });
+    },
+    get loadingParams() {
+      var params = this._params;
+      return (0, _util.shadow)(this, 'loadingParams', {
+        disableRange: params.disableRange,
+        disableStream: params.disableStream,
+        disableAutoFetch: params.disableAutoFetch,
+        disableCreateObjectURL: params.disableCreateObjectURL
+      });
     }
   };
   return WorkerTransport;
@@ -1484,6 +1534,8 @@ var RenderTask = function RenderTaskClosure() {
 var InternalRenderTask = function InternalRenderTaskClosure() {
   var canvasInRendering = new WeakMap();
   function InternalRenderTask(callback, params, objs, commonObjs, operatorList, pageNumber, canvasFactory, webGLContext) {
+    var pdfBug = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : false;
+
     this.callback = callback;
     this.params = params;
     this.objs = objs;
@@ -1493,6 +1545,7 @@ var InternalRenderTask = function InternalRenderTaskClosure() {
     this.pageNumber = pageNumber;
     this.canvasFactory = canvasFactory;
     this.webGLContext = webGLContext;
+    this._pdfBug = pdfBug;
     this.running = false;
     this.graphicsReadyCallback = null;
     this.graphicsReady = false;
@@ -1516,7 +1569,7 @@ var InternalRenderTask = function InternalRenderTaskClosure() {
       if (this.cancelled) {
         return;
       }
-      if ((0, _dom_utils.getDefaultSetting)('pdfBug') && _global_scope2.default.StepperManager && _global_scope2.default.StepperManager.enabled) {
+      if (this._pdfBug && _global_scope2.default.StepperManager && _global_scope2.default.StepperManager.enabled) {
         this.stepper = _global_scope2.default.StepperManager.create(this.pageNumber - 1);
         this.stepper.init(this.operatorList);
         this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
@@ -1597,8 +1650,8 @@ var InternalRenderTask = function InternalRenderTaskClosure() {
 }();
 var version, build;
 {
-  exports.version = version = '2.0.402';
-  exports.build = build = '401f3a9d';
+  exports.version = version = '2.0.419';
+  exports.build = build = 'c33bf800';
 }
 exports.getDocument = getDocument;
 exports.LoopbackPort = LoopbackPort;

+ 47 - 0
lib/display/api_compatibility.js

@@ -0,0 +1,47 @@
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2017 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @licend The above is the entire license notice for the
+ * Javascript code in this page
+ */
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+var compatibilityParams = Object.create(null);
+{
+  var userAgent = typeof navigator !== 'undefined' && navigator.userAgent || '';
+  var isIE = /Trident/.test(userAgent);
+  var isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent);
+  var isIOSChrome = /CriOS/.test(userAgent);
+  var isSafari = /Safari\//.test(userAgent) && !/(Chrome\/|Android\s)/.test(userAgent);
+  (function checkOnBlobSupport() {
+    if (isIE || isIOSChrome) {
+      compatibilityParams.disableCreateObjectURL = true;
+    }
+  })();
+  (function checkRangeRequests() {
+    if (isSafari || isIOS) {
+      compatibilityParams.disableRange = true;
+      compatibilityParams.disableStream = true;
+    }
+  })();
+}
+var apiCompatibilityParams = Object.freeze(compatibilityParams);
+exports.apiCompatibilityParams = apiCompatibilityParams;

+ 2 - 36
lib/display/dom_utils.js

@@ -24,18 +24,12 @@
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.DummyStatTimer = exports.StatTimer = exports.SimpleXMLParser = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.getDefaultSetting = exports.LinkTarget = exports.getFilenameFromUrl = exports.addLinkAttributes = exports.RenderingCancelledException = undefined;
+exports.DummyStatTimer = exports.StatTimer = exports.SimpleXMLParser = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.getFilenameFromUrl = exports.addLinkAttributes = exports.RenderingCancelledException = undefined;
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
 var _util = require('../shared/util');
 
-var _global_scope = require('../shared/global_scope');
-
-var _global_scope2 = _interopRequireDefault(_global_scope);
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 var DEFAULT_LINK_REL = 'noopener noreferrer nofollow';
@@ -110,7 +104,7 @@ var DOMCMapReaderFactory = function () {
       var name = _ref2.name;
 
       if (!this.baseUrl) {
-        return Promise.reject(new Error('CMap baseUrl must be specified, ' + 'see "PDFJS.cMapUrl" (and also "PDFJS.cMapPacked").'));
+        return Promise.reject(new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'));
       }
       if (!name) {
         return Promise.reject(new Error('CMap name must be specified.'));
@@ -347,33 +341,6 @@ function getFilenameFromUrl(url) {
   var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);
   return url.substring(url.lastIndexOf('/', end) + 1, end);
 }
-function getDefaultSetting(id) {
-  var globalSettings = _global_scope2.default.PDFJS;
-  switch (id) {
-    case 'pdfBug':
-      return globalSettings ? globalSettings.pdfBug : false;
-    case 'disableAutoFetch':
-      return globalSettings ? globalSettings.disableAutoFetch : false;
-    case 'disableStream':
-      return globalSettings ? globalSettings.disableStream : false;
-    case 'disableRange':
-      return globalSettings ? globalSettings.disableRange : false;
-    case 'disableFontFace':
-      return globalSettings ? globalSettings.disableFontFace : false;
-    case 'disableCreateObjectURL':
-      return globalSettings ? globalSettings.disableCreateObjectURL : false;
-    case 'cMapUrl':
-      return globalSettings ? globalSettings.cMapUrl : null;
-    case 'cMapPacked':
-      return globalSettings ? globalSettings.cMapPacked : false;
-    case 'maxImageSize':
-      return globalSettings ? globalSettings.maxImageSize : -1;
-    case 'isEvalSupported':
-      return globalSettings ? globalSettings.isEvalSupported : true;
-    default:
-      throw new Error('Unknown default setting: ' + id);
-  }
-}
 
 var StatTimer = function () {
   function StatTimer() {
@@ -464,7 +431,6 @@ exports.RenderingCancelledException = RenderingCancelledException;
 exports.addLinkAttributes = addLinkAttributes;
 exports.getFilenameFromUrl = getFilenameFromUrl;
 exports.LinkTarget = LinkTarget;
-exports.getDefaultSetting = getDefaultSetting;
 exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL;
 exports.DOMCanvasFactory = DOMCanvasFactory;
 exports.DOMCMapReaderFactory = DOMCMapReaderFactory;

+ 18 - 17
lib/display/font_loader.js

@@ -235,42 +235,43 @@ var IsEvalSupportedCached = {
   }
 };
 var FontFaceObject = function FontFaceObjectClosure() {
-  function FontFaceObject(translatedData, options) {
+  function FontFaceObject(translatedData, _ref) {
+    var _ref$isEvalSupported = _ref.isEvalSupported,
+        isEvalSupported = _ref$isEvalSupported === undefined ? true : _ref$isEvalSupported,
+        _ref$disableFontFace = _ref.disableFontFace,
+        disableFontFace = _ref$disableFontFace === undefined ? false : _ref$disableFontFace,
+        _ref$fontRegistry = _ref.fontRegistry,
+        fontRegistry = _ref$fontRegistry === undefined ? null : _ref$fontRegistry;
+
     this.compiledGlyphs = Object.create(null);
     for (var i in translatedData) {
       this[i] = translatedData[i];
     }
-    this.options = options;
+    this.isEvalSupported = isEvalSupported !== false;
+    this.disableFontFace = disableFontFace === true;
+    this.fontRegistry = fontRegistry;
   }
   FontFaceObject.prototype = {
     createNativeFontFace: function FontFaceObject_createNativeFontFace() {
-      if (!this.data) {
-        return null;
-      }
-      if (this.options.disableFontFace) {
-        this.disableFontFace = true;
+      if (!this.data || this.disableFontFace) {
         return null;
       }
       var nativeFontFace = new FontFace(this.loadedName, this.data, {});
-      if (this.options.fontRegistry) {
-        this.options.fontRegistry.registerFont(this);
+      if (this.fontRegistry) {
+        this.fontRegistry.registerFont(this);
       }
       return nativeFontFace;
     },
     createFontFaceRule: function FontFaceObject_createFontFaceRule() {
-      if (!this.data) {
-        return null;
-      }
-      if (this.options.disableFontFace) {
-        this.disableFontFace = true;
+      if (!this.data || this.disableFontFace) {
         return null;
       }
       var data = (0, _util.bytesToString)(new Uint8Array(this.data));
       var fontName = this.loadedName;
       var url = 'url(data:' + this.mimetype + ';base64,' + btoa(data) + ');';
       var rule = '@font-face { font-family:"' + fontName + '";src:' + url + '}';
-      if (this.options.fontRegistry) {
-        this.options.fontRegistry.registerFont(this, url);
+      if (this.fontRegistry) {
+        this.fontRegistry.registerFont(this, url);
       }
       return rule;
     },
@@ -278,7 +279,7 @@ var FontFaceObject = function FontFaceObjectClosure() {
       if (!(character in this.compiledGlyphs)) {
         var cmds = objs.get(this.loadedName + '_path_' + character);
         var current, i, len;
-        if (this.options.isEvalSupported && IsEvalSupportedCached.value) {
+        if (this.isEvalSupported && IsEvalSupportedCached.value) {
           var args,
               js = '';
           for (i = 0, len = cmds.length; i < len; i++) {

+ 0 - 102
lib/display/global.js

@@ -1,102 +0,0 @@
-/**
- * @licstart The following is the entire license notice for the
- * Javascript code in this page
- *
- * Copyright 2017 Mozilla Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * @licend The above is the entire license notice for the
- * Javascript code in this page
- */
-'use strict';
-
-Object.defineProperty(exports, "__esModule", {
-  value: true
-});
-exports.PDFJS = exports.globalScope = undefined;
-
-var _util = require('../shared/util');
-
-var _dom_utils = require('./dom_utils');
-
-var _api = require('./api');
-
-var _annotation_layer = require('./annotation_layer');
-
-var _global_scope = require('../shared/global_scope');
-
-var _global_scope2 = _interopRequireDefault(_global_scope);
-
-var _worker_options = require('./worker_options');
-
-var _metadata = require('./metadata');
-
-var _text_layer = require('./text_layer');
-
-var _svg = require('./svg');
-
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-if (!_global_scope2.default.PDFJS) {
-  _global_scope2.default.PDFJS = {};
-}
-var PDFJS = _global_scope2.default.PDFJS;
-PDFJS.pdfBug = false;
-PDFJS.OPS = _util.OPS;
-PDFJS.UNSUPPORTED_FEATURES = _util.UNSUPPORTED_FEATURES;
-PDFJS.shadow = _util.shadow;
-PDFJS.createBlob = _util.createBlob;
-PDFJS.createObjectURL = function PDFJS_createObjectURL(data, contentType) {
-  return (0, _util.createObjectURL)(data, contentType, PDFJS.disableCreateObjectURL);
-};
-Object.defineProperty(PDFJS, 'isLittleEndian', {
-  configurable: true,
-  get: function PDFJS_isLittleEndian() {
-    return (0, _util.shadow)(PDFJS, 'isLittleEndian', (0, _util.isLittleEndian)());
-  }
-});
-PDFJS.removeNullCharacters = _util.removeNullCharacters;
-PDFJS.PasswordResponses = _util.PasswordResponses;
-PDFJS.PasswordException = _util.PasswordException;
-PDFJS.UnknownErrorException = _util.UnknownErrorException;
-PDFJS.InvalidPDFException = _util.InvalidPDFException;
-PDFJS.MissingPDFException = _util.MissingPDFException;
-PDFJS.UnexpectedResponseException = _util.UnexpectedResponseException;
-PDFJS.Util = _util.Util;
-PDFJS.PageViewport = _util.PageViewport;
-PDFJS.createPromiseCapability = _util.createPromiseCapability;
-PDFJS.maxImageSize = PDFJS.maxImageSize === undefined ? -1 : PDFJS.maxImageSize;
-PDFJS.cMapUrl = PDFJS.cMapUrl === undefined ? null : PDFJS.cMapUrl;
-PDFJS.cMapPacked = PDFJS.cMapPacked === undefined ? false : PDFJS.cMapPacked;
-PDFJS.disableFontFace = PDFJS.disableFontFace === undefined ? false : PDFJS.disableFontFace;
-PDFJS.disableRange = PDFJS.disableRange === undefined ? false : PDFJS.disableRange;
-PDFJS.disableStream = PDFJS.disableStream === undefined ? false : PDFJS.disableStream;
-PDFJS.disableAutoFetch = PDFJS.disableAutoFetch === undefined ? false : PDFJS.disableAutoFetch;
-PDFJS.pdfBug = PDFJS.pdfBug === undefined ? false : PDFJS.pdfBug;
-PDFJS.disableCreateObjectURL = PDFJS.disableCreateObjectURL === undefined ? false : PDFJS.disableCreateObjectURL;
-PDFJS.externalLinkTarget = PDFJS.externalLinkTarget === undefined ? _dom_utils.LinkTarget.NONE : PDFJS.externalLinkTarget;
-PDFJS.externalLinkRel = PDFJS.externalLinkRel === undefined ? _dom_utils.DEFAULT_LINK_REL : PDFJS.externalLinkRel;
-PDFJS.isEvalSupported = PDFJS.isEvalSupported === undefined ? true : PDFJS.isEvalSupported;
-PDFJS.getDocument = _api.getDocument;
-PDFJS.LoopbackPort = _api.LoopbackPort;
-PDFJS.PDFDataRangeTransport = _api.PDFDataRangeTransport;
-PDFJS.PDFWorker = _api.PDFWorker;
-PDFJS.GlobalWorkerOptions = _worker_options.GlobalWorkerOptions;
-PDFJS.getFilenameFromUrl = _dom_utils.getFilenameFromUrl;
-PDFJS.AnnotationLayer = _annotation_layer.AnnotationLayer;
-PDFJS.renderTextLayer = _text_layer.renderTextLayer;
-PDFJS.Metadata = _metadata.Metadata;
-PDFJS.SVGGraphics = _svg.SVGGraphics;
-exports.globalScope = _global_scope2.default;
-exports.PDFJS = PDFJS;

+ 7 - 2
lib/display/text_layer.js

@@ -28,7 +28,11 @@ exports.renderTextLayer = undefined;
 
 var _util = require('../shared/util');
 
-var _dom_utils = require('./dom_utils');
+var _global_scope = require('../shared/global_scope');
+
+var _global_scope2 = _interopRequireDefault(_global_scope);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 var renderTextLayer = function renderTextLayerClosure() {
   var MAX_TEXT_DIVS_TO_RENDER = 100000;
@@ -86,7 +90,7 @@ var renderTextLayer = function renderTextLayerClosure() {
     textDivProperties.style = styleBuf.join('');
     textDiv.setAttribute('style', textDivProperties.style);
     textDiv.textContent = geom.str;
-    if ((0, _dom_utils.getDefaultSetting)('pdfBug')) {
+    if (task._fontInspectorEnabled) {
       textDiv.dataset.fontName = geom.fontName;
     }
     if (angle !== 0) {
@@ -391,6 +395,7 @@ var renderTextLayer = function renderTextLayerClosure() {
     this._textDivs = textDivs || [];
     this._textContentItemsStr = textContentItemsStr || [];
     this._enhanceTextSelection = !!enhanceTextSelection;
+    this._fontInspectorEnabled = !!(_global_scope2.default.FontInspector && _global_scope2.default.FontInspector.enabled);
     this._reader = null;
     this._layoutTextLastFontSize = null;
     this._layoutTextLastFontFamily = null;

+ 6 - 5
lib/pdf.js

@@ -21,16 +21,16 @@
  */
 'use strict';
 
-var pdfjsVersion = '2.0.402';
-var pdfjsBuild = '401f3a9d';
+var pdfjsVersion = '2.0.419';
+var pdfjsBuild = 'c33bf800';
 var pdfjsSharedUtil = require('./shared/util.js');
-var pdfjsDisplayGlobal = require('./display/global.js');
 var pdfjsDisplayAPI = require('./display/api.js');
 var pdfjsDisplayTextLayer = require('./display/text_layer.js');
 var pdfjsDisplayAnnotationLayer = require('./display/annotation_layer.js');
 var pdfjsDisplayDOMUtils = require('./display/dom_utils.js');
 var pdfjsDisplaySVG = require('./display/svg.js');
 var pdfjsDisplayWorkerOptions = require('./display/worker_options.js');
+var pdfjsDisplayAPICompatibility = require('./display/api_compatibility.js');
 {
   var isNodeJS = require('./shared/is_node.js');
   if (isNodeJS()) {
@@ -50,7 +50,6 @@ var pdfjsDisplayWorkerOptions = require('./display/worker_options.js');
     });
   }
 }
-exports.PDFJS = pdfjsDisplayGlobal.PDFJS;
 exports.build = pdfjsDisplayAPI.build;
 exports.version = pdfjsDisplayAPI.version;
 exports.getDocument = pdfjsDisplayAPI.getDocument;
@@ -74,8 +73,10 @@ exports.createObjectURL = pdfjsSharedUtil.createObjectURL;
 exports.removeNullCharacters = pdfjsSharedUtil.removeNullCharacters;
 exports.shadow = pdfjsSharedUtil.shadow;
 exports.createBlob = pdfjsSharedUtil.createBlob;
+exports.Util = pdfjsSharedUtil.Util;
 exports.RenderingCancelledException = pdfjsDisplayDOMUtils.RenderingCancelledException;
 exports.getFilenameFromUrl = pdfjsDisplayDOMUtils.getFilenameFromUrl;
 exports.LinkTarget = pdfjsDisplayDOMUtils.LinkTarget;
 exports.addLinkAttributes = pdfjsDisplayDOMUtils.addLinkAttributes;
-exports.GlobalWorkerOptions = pdfjsDisplayWorkerOptions.GlobalWorkerOptions;
+exports.GlobalWorkerOptions = pdfjsDisplayWorkerOptions.GlobalWorkerOptions;
+exports.apiCompatibilityParams = pdfjsDisplayAPICompatibility.apiCompatibilityParams;

+ 2 - 2
lib/pdf.worker.js

@@ -21,7 +21,7 @@
  */
 'use strict';
 
-var pdfjsVersion = '2.0.402';
-var pdfjsBuild = '401f3a9d';
+var pdfjsVersion = '2.0.419';
+var pdfjsBuild = 'c33bf800';
 var pdfjsCoreWorker = require('./core/worker.js');
 exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;

+ 3 - 22
lib/shared/compatibility.js

@@ -23,19 +23,11 @@
 
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-if (typeof PDFJS === 'undefined' || !PDFJS.compatibilityChecked) {
-  var globalScope = require('./global_scope');
+var globalScope = require('./global_scope');
+if (!globalScope._pdfjsCompatibilityChecked) {
+  globalScope._pdfjsCompatibilityChecked = true;
   var isNodeJS = require('./is_node');
-  var userAgent = typeof navigator !== 'undefined' && navigator.userAgent || '';
-  var isIOSChrome = userAgent.indexOf('CriOS') >= 0;
-  var isIE = userAgent.indexOf('Trident') >= 0;
-  var isIOS = /\b(iPad|iPhone|iPod)(?=;)/.test(userAgent);
-  var isSafari = /Safari\//.test(userAgent) && !/(Chrome\/|Android\s)/.test(userAgent);
   var hasDOM = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' && (typeof document === 'undefined' ? 'undefined' : _typeof(document)) === 'object';
-  if (typeof PDFJS === 'undefined') {
-    globalScope.PDFJS = {};
-  }
-  PDFJS.compatibilityChecked = true;
   (function checkNodeBtoa() {
     if (globalScope.btoa || !isNodeJS()) {
       return;
@@ -52,17 +44,6 @@ if (typeof PDFJS === 'undefined' || !PDFJS.compatibilityChecked) {
       return Buffer.from(input, 'base64').toString('binary');
     };
   })();
-  (function checkOnBlobSupport() {
-    if (isIE || isIOSChrome) {
-      PDFJS.disableCreateObjectURL = true;
-    }
-  })();
-  (function checkRangeRequests() {
-    if (isSafari || isIOS) {
-      PDFJS.disableRange = true;
-      PDFJS.disableStream = true;
-    }
-  })();
   (function checkCurrentScript() {
     if (!hasDOM) {
       return;

+ 184 - 186
lib/test/unit/api_spec.js

@@ -60,203 +60,201 @@ describe('api', function () {
       callback();
     }, WAIT_TIMEOUT);
   }
-  describe('PDFJS', function () {
-    describe('getDocument', function () {
-      it('creates pdf doc from URL', function (done) {
-        var loadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
-        var isProgressReportedResolved = false;
-        var progressReportedCapability = (0, _util.createPromiseCapability)();
-        loadingTask.onProgress = function (progressData) {
-          if (!isProgressReportedResolved) {
-            isProgressReportedResolved = true;
-            progressReportedCapability.resolve(progressData);
-          }
-        };
-        var promises = [progressReportedCapability.promise, loadingTask.promise];
-        Promise.all(promises).then(function (data) {
-          expect(data[0].loaded / data[0].total > 0).toEqual(true);
-          expect(data[1] instanceof _api.PDFDocumentProxy).toEqual(true);
-          expect(loadingTask).toEqual(data[1].loadingTask);
-          loadingTask.destroy().then(done);
-        }).catch(function (reason) {
-          done.fail(reason);
-        });
+  describe('getDocument', function () {
+    it('creates pdf doc from URL', function (done) {
+      var loadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
+      var isProgressReportedResolved = false;
+      var progressReportedCapability = (0, _util.createPromiseCapability)();
+      loadingTask.onProgress = function (progressData) {
+        if (!isProgressReportedResolved) {
+          isProgressReportedResolved = true;
+          progressReportedCapability.resolve(progressData);
+        }
+      };
+      var promises = [progressReportedCapability.promise, loadingTask.promise];
+      Promise.all(promises).then(function (data) {
+        expect(data[0].loaded / data[0].total > 0).toEqual(true);
+        expect(data[1] instanceof _api.PDFDocumentProxy).toEqual(true);
+        expect(loadingTask).toEqual(data[1].loadingTask);
+        loadingTask.destroy().then(done);
+      }).catch(function (reason) {
+        done.fail(reason);
       });
-      it('creates pdf doc from URL and aborts before worker initialized', function (done) {
-        var loadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
-        var destroyed = loadingTask.destroy();
-        loadingTask.promise.then(function (reason) {
-          done.fail('shall fail loading');
-        }).catch(function (reason) {
-          expect(true).toEqual(true);
-          destroyed.then(done);
-        });
+    });
+    it('creates pdf doc from URL and aborts before worker initialized', function (done) {
+      var loadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
+      var destroyed = loadingTask.destroy();
+      loadingTask.promise.then(function (reason) {
+        done.fail('shall fail loading');
+      }).catch(function (reason) {
+        expect(true).toEqual(true);
+        destroyed.then(done);
       });
-      it('creates pdf doc from URL and aborts loading after worker initialized', function (done) {
-        var loadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
-        var destroyed = loadingTask._worker.promise.then(function () {
-          return loadingTask.destroy();
-        });
-        destroyed.then(function (data) {
-          expect(true).toEqual(true);
-          done();
-        }).catch(function (reason) {
-          done.fail(reason);
-        });
+    });
+    it('creates pdf doc from URL and aborts loading after worker initialized', function (done) {
+      var loadingTask = (0, _api.getDocument)(basicApiGetDocumentParams);
+      var destroyed = loadingTask._worker.promise.then(function () {
+        return loadingTask.destroy();
       });
-      it('creates pdf doc from typed array', function (done) {
-        var typedArrayPdf;
-        if ((0, _is_node2.default)()) {
-          typedArrayPdf = _test_utils.NodeFileReaderFactory.fetch({ path: _test_utils.TEST_PDFS_PATH.node + basicApiFileName });
+      destroyed.then(function (data) {
+        expect(true).toEqual(true);
+        done();
+      }).catch(function (reason) {
+        done.fail(reason);
+      });
+    });
+    it('creates pdf doc from typed array', function (done) {
+      var typedArrayPdf;
+      if ((0, _is_node2.default)()) {
+        typedArrayPdf = _test_utils.NodeFileReaderFactory.fetch({ path: _test_utils.TEST_PDFS_PATH.node + basicApiFileName });
+      } else {
+        var nonBinaryRequest = false;
+        var request = new XMLHttpRequest();
+        request.open('GET', _test_utils.TEST_PDFS_PATH.dom + basicApiFileName, false);
+        try {
+          request.responseType = 'arraybuffer';
+          nonBinaryRequest = request.responseType !== 'arraybuffer';
+        } catch (e) {
+          nonBinaryRequest = true;
+        }
+        if (nonBinaryRequest && request.overrideMimeType) {
+          request.overrideMimeType('text/plain; charset=x-user-defined');
+        }
+        request.send(null);
+        if (nonBinaryRequest) {
+          typedArrayPdf = (0, _util.stringToBytes)(request.responseText);
         } else {
-          var nonBinaryRequest = false;
-          var request = new XMLHttpRequest();
-          request.open('GET', _test_utils.TEST_PDFS_PATH.dom + basicApiFileName, false);
-          try {
-            request.responseType = 'arraybuffer';
-            nonBinaryRequest = request.responseType !== 'arraybuffer';
-          } catch (e) {
-            nonBinaryRequest = true;
-          }
-          if (nonBinaryRequest && request.overrideMimeType) {
-            request.overrideMimeType('text/plain; charset=x-user-defined');
-          }
-          request.send(null);
-          if (nonBinaryRequest) {
-            typedArrayPdf = (0, _util.stringToBytes)(request.responseText);
-          } else {
-            typedArrayPdf = new Uint8Array(request.response);
-          }
+          typedArrayPdf = new Uint8Array(request.response);
         }
-        expect(typedArrayPdf.length).toEqual(basicApiFileLength);
-        var loadingTask = (0, _api.getDocument)(typedArrayPdf);
-        loadingTask.promise.then(function (data) {
-          expect(data instanceof _api.PDFDocumentProxy).toEqual(true);
-          loadingTask.destroy().then(done);
-        }).catch(function (reason) {
-          done.fail(reason);
-        });
+      }
+      expect(typedArrayPdf.length).toEqual(basicApiFileLength);
+      var loadingTask = (0, _api.getDocument)(typedArrayPdf);
+      loadingTask.promise.then(function (data) {
+        expect(data instanceof _api.PDFDocumentProxy).toEqual(true);
+        loadingTask.destroy().then(done);
+      }).catch(function (reason) {
+        done.fail(reason);
       });
-      it('creates pdf doc from invalid PDF file', function (done) {
-        var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('bug1020226.pdf'));
-        loadingTask.promise.then(function () {
-          done.fail('shall fail loading');
-        }).catch(function (error) {
-          expect(error instanceof _util.InvalidPDFException).toEqual(true);
-          loadingTask.destroy().then(done);
-        });
+    });
+    it('creates pdf doc from invalid PDF file', function (done) {
+      var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('bug1020226.pdf'));
+      loadingTask.promise.then(function () {
+        done.fail('shall fail loading');
+      }).catch(function (error) {
+        expect(error instanceof _util.InvalidPDFException).toEqual(true);
+        loadingTask.destroy().then(done);
       });
-      it('creates pdf doc from non-existent URL', function (done) {
-        if ((0, _is_node2.default)()) {
-          pending('XMLHttpRequest is not supported in Node.js.');
+    });
+    it('creates pdf doc from non-existent URL', function (done) {
+      if ((0, _is_node2.default)()) {
+        pending('XMLHttpRequest is not supported in Node.js.');
+      }
+      var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('non-existent.pdf'));
+      loadingTask.promise.then(function (error) {
+        done.fail('shall fail loading');
+      }).catch(function (error) {
+        expect(error instanceof _util.MissingPDFException).toEqual(true);
+        loadingTask.destroy().then(done);
+      });
+    });
+    it('creates pdf doc from PDF file protected with user and owner password', function (done) {
+      var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('pr6531_1.pdf'));
+      var isPasswordNeededResolved = false;
+      var passwordNeededCapability = (0, _util.createPromiseCapability)();
+      var isPasswordIncorrectResolved = false;
+      var passwordIncorrectCapability = (0, _util.createPromiseCapability)();
+      loadingTask.onPassword = function (updatePassword, reason) {
+        if (reason === _util.PasswordResponses.NEED_PASSWORD && !isPasswordNeededResolved) {
+          isPasswordNeededResolved = true;
+          passwordNeededCapability.resolve();
+          updatePassword('qwerty');
+          return;
         }
-        var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('non-existent.pdf'));
-        loadingTask.promise.then(function (error) {
-          done.fail('shall fail loading');
-        }).catch(function (error) {
-          expect(error instanceof _util.MissingPDFException).toEqual(true);
-          loadingTask.destroy().then(done);
-        });
+        if (reason === _util.PasswordResponses.INCORRECT_PASSWORD && !isPasswordIncorrectResolved) {
+          isPasswordIncorrectResolved = true;
+          passwordIncorrectCapability.resolve();
+          updatePassword('asdfasdf');
+          return;
+        }
+        expect(false).toEqual(true);
+      };
+      var promises = [passwordNeededCapability.promise, passwordIncorrectCapability.promise, loadingTask.promise];
+      Promise.all(promises).then(function (data) {
+        expect(data[2] instanceof _api.PDFDocumentProxy).toEqual(true);
+        loadingTask.destroy().then(done);
+      }).catch(function (reason) {
+        done.fail(reason);
       });
-      it('creates pdf doc from PDF file protected with user and owner password', function (done) {
-        var loadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)('pr6531_1.pdf'));
-        var isPasswordNeededResolved = false;
-        var passwordNeededCapability = (0, _util.createPromiseCapability)();
-        var isPasswordIncorrectResolved = false;
-        var passwordIncorrectCapability = (0, _util.createPromiseCapability)();
-        loadingTask.onPassword = function (updatePassword, reason) {
-          if (reason === _util.PasswordResponses.NEED_PASSWORD && !isPasswordNeededResolved) {
-            isPasswordNeededResolved = true;
-            passwordNeededCapability.resolve();
-            updatePassword('qwerty');
-            return;
-          }
-          if (reason === _util.PasswordResponses.INCORRECT_PASSWORD && !isPasswordIncorrectResolved) {
-            isPasswordIncorrectResolved = true;
-            passwordIncorrectCapability.resolve();
-            updatePassword('asdfasdf');
-            return;
-          }
-          expect(false).toEqual(true);
-        };
-        var promises = [passwordNeededCapability.promise, passwordIncorrectCapability.promise, loadingTask.promise];
-        Promise.all(promises).then(function (data) {
-          expect(data[2] instanceof _api.PDFDocumentProxy).toEqual(true);
-          loadingTask.destroy().then(done);
-        }).catch(function (reason) {
-          done.fail(reason);
-        });
+    });
+    it('creates pdf doc from PDF file protected with only a user password', function (done) {
+      var filename = 'pr6531_2.pdf';
+      var passwordNeededLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename, { password: '' }));
+      var result1 = passwordNeededLoadingTask.promise.then(function () {
+        done.fail('shall fail with no password');
+        return Promise.reject(new Error('loadingTask should be rejected'));
+      }, function (data) {
+        expect(data instanceof _util.PasswordException).toEqual(true);
+        expect(data.code).toEqual(_util.PasswordResponses.NEED_PASSWORD);
+        return passwordNeededLoadingTask.destroy();
+      });
+      var passwordIncorrectLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename, { password: 'qwerty' }));
+      var result2 = passwordIncorrectLoadingTask.promise.then(function () {
+        done.fail('shall fail with wrong password');
+        return Promise.reject(new Error('loadingTask should be rejected'));
+      }, function (data) {
+        expect(data instanceof _util.PasswordException).toEqual(true);
+        expect(data.code).toEqual(_util.PasswordResponses.INCORRECT_PASSWORD);
+        return passwordIncorrectLoadingTask.destroy();
+      });
+      var passwordAcceptedLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename, { password: 'asdfasdf' }));
+      var result3 = passwordAcceptedLoadingTask.promise.then(function (data) {
+        expect(data instanceof _api.PDFDocumentProxy).toEqual(true);
+        return passwordAcceptedLoadingTask.destroy();
+      });
+      Promise.all([result1, result2, result3]).then(function () {
+        done();
+      }).catch(function (reason) {
+        done.fail(reason);
       });
-      it('creates pdf doc from PDF file protected with only a user password', function (done) {
-        var filename = 'pr6531_2.pdf';
-        var passwordNeededLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename, { password: '' }));
-        var result1 = passwordNeededLoadingTask.promise.then(function () {
-          done.fail('shall fail with no password');
-          return Promise.reject(new Error('loadingTask should be rejected'));
-        }, function (data) {
-          expect(data instanceof _util.PasswordException).toEqual(true);
-          expect(data.code).toEqual(_util.PasswordResponses.NEED_PASSWORD);
-          return passwordNeededLoadingTask.destroy();
-        });
-        var passwordIncorrectLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename, { password: 'qwerty' }));
-        var result2 = passwordIncorrectLoadingTask.promise.then(function () {
-          done.fail('shall fail with wrong password');
-          return Promise.reject(new Error('loadingTask should be rejected'));
-        }, function (data) {
-          expect(data instanceof _util.PasswordException).toEqual(true);
-          expect(data.code).toEqual(_util.PasswordResponses.INCORRECT_PASSWORD);
-          return passwordIncorrectLoadingTask.destroy();
-        });
-        var passwordAcceptedLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename, { password: 'asdfasdf' }));
-        var result3 = passwordAcceptedLoadingTask.promise.then(function (data) {
-          expect(data instanceof _api.PDFDocumentProxy).toEqual(true);
-          return passwordAcceptedLoadingTask.destroy();
-        });
-        Promise.all([result1, result2, result3]).then(function () {
-          done();
-        }).catch(function (reason) {
-          done.fail(reason);
-        });
+    });
+    it('creates pdf doc from password protected PDF file and aborts/throws ' + 'in the onPassword callback (issue 7806)', function (done) {
+      var filename = 'issue3371.pdf';
+      var passwordNeededLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename));
+      var passwordIncorrectLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename, { password: 'qwerty' }));
+      var passwordNeededDestroyed = void 0;
+      passwordNeededLoadingTask.onPassword = function (callback, reason) {
+        if (reason === _util.PasswordResponses.NEED_PASSWORD) {
+          passwordNeededDestroyed = passwordNeededLoadingTask.destroy();
+          return;
+        }
+        expect(false).toEqual(true);
+      };
+      var result1 = passwordNeededLoadingTask.promise.then(function () {
+        done.fail('shall fail since the loadingTask should be destroyed');
+        return Promise.reject(new Error('loadingTask should be rejected'));
+      }, function (reason) {
+        expect(reason instanceof _util.PasswordException).toEqual(true);
+        expect(reason.code).toEqual(_util.PasswordResponses.NEED_PASSWORD);
+        return passwordNeededDestroyed;
       });
-      it('creates pdf doc from password protected PDF file and aborts/throws ' + 'in the onPassword callback (issue 7806)', function (done) {
-        var filename = 'issue3371.pdf';
-        var passwordNeededLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename));
-        var passwordIncorrectLoadingTask = (0, _api.getDocument)((0, _test_utils.buildGetDocumentParams)(filename, { password: 'qwerty' }));
-        var passwordNeededDestroyed = void 0;
-        passwordNeededLoadingTask.onPassword = function (callback, reason) {
-          if (reason === _util.PasswordResponses.NEED_PASSWORD) {
-            passwordNeededDestroyed = passwordNeededLoadingTask.destroy();
-            return;
-          }
-          expect(false).toEqual(true);
-        };
-        var result1 = passwordNeededLoadingTask.promise.then(function () {
-          done.fail('shall fail since the loadingTask should be destroyed');
-          return Promise.reject(new Error('loadingTask should be rejected'));
-        }, function (reason) {
-          expect(reason instanceof _util.PasswordException).toEqual(true);
-          expect(reason.code).toEqual(_util.PasswordResponses.NEED_PASSWORD);
-          return passwordNeededDestroyed;
-        });
-        passwordIncorrectLoadingTask.onPassword = function (callback, reason) {
-          if (reason === _util.PasswordResponses.INCORRECT_PASSWORD) {
-            throw new Error('Incorrect password');
-          }
-          expect(false).toEqual(true);
-        };
-        var result2 = passwordIncorrectLoadingTask.promise.then(function () {
-          done.fail('shall fail since the onPassword callback should throw');
-          return Promise.reject(new Error('loadingTask should be rejected'));
-        }, function (reason) {
-          expect(reason instanceof _util.PasswordException).toEqual(true);
-          expect(reason.code).toEqual(_util.PasswordResponses.INCORRECT_PASSWORD);
-          return passwordIncorrectLoadingTask.destroy();
-        });
-        Promise.all([result1, result2]).then(function () {
-          done();
-        }).catch(function (reason) {
-          done.fail(reason);
-        });
+      passwordIncorrectLoadingTask.onPassword = function (callback, reason) {
+        if (reason === _util.PasswordResponses.INCORRECT_PASSWORD) {
+          throw new Error('Incorrect password');
+        }
+        expect(false).toEqual(true);
+      };
+      var result2 = passwordIncorrectLoadingTask.promise.then(function () {
+        done.fail('shall fail since the onPassword callback should throw');
+        return Promise.reject(new Error('loadingTask should be rejected'));
+      }, function (reason) {
+        expect(reason instanceof _util.PasswordException).toEqual(true);
+        expect(reason.code).toEqual(_util.PasswordResponses.INCORRECT_PASSWORD);
+        return passwordIncorrectLoadingTask.destroy();
+      });
+      Promise.all([result1, result2]).then(function () {
+        done();
+      }).catch(function (reason) {
+        done.fail(reason);
       });
     });
   });

+ 1 - 1
lib/test/unit/cmap_spec.js

@@ -267,7 +267,7 @@ describe('cmap', function () {
       done.fail('No CMap should be loaded');
     }, function (reason) {
       expect(reason instanceof Error).toEqual(true);
-      expect(reason.message).toEqual('CMap baseUrl must be specified, ' + 'see "PDFJS.cMapUrl" (and also "PDFJS.cMapPacked").');
+      expect(reason.message).toEqual('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.');
       done();
     });
   });

+ 1 - 1
lib/test/unit/test_utils.js

@@ -95,7 +95,7 @@ var NodeCMapReaderFactory = function () {
       var name = _ref2.name;
 
       if (!this.baseUrl) {
-        return Promise.reject(new Error('CMap baseUrl must be specified, ' + 'see "PDFJS.cMapUrl" (and also "PDFJS.cMapPacked").'));
+        return Promise.reject(new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'));
       }
       if (!name) {
         return Promise.reject(new Error('CMap name must be specified.'));

+ 80 - 92
lib/web/app.js

@@ -38,6 +38,8 @@ var _pdf_rendering_queue = require('./pdf_rendering_queue');
 
 var _pdf_sidebar = require('./pdf_sidebar');
 
+var _app_options = require('./app_options');
+
 var _dom_events = require('./dom_events');
 
 var _overlay_manager = require('./overlay_manager');
@@ -70,30 +72,22 @@ var _secondary_toolbar = require('./secondary_toolbar');
 
 var _toolbar = require('./toolbar');
 
-var _viewer_compatibility = require('./viewer_compatibility');
-
 var _view_history = require('./view_history');
 
 var DEFAULT_SCALE_DELTA = 1.1;
 var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;
-function configure(PDFJS) {
-  PDFJS.imageResourcesPath = './images/';
-  _pdf.GlobalWorkerOptions.workerSrc = '../build/pdf.worker.js';
-  PDFJS.cMapUrl = '../web/cmaps/';
-  PDFJS.cMapPacked = true;
-}
 var DefaultExternalServices = {
   updateFindControlState: function updateFindControlState(data) {},
   initPassiveLoading: function initPassiveLoading(callbacks) {},
   fallback: function fallback(data, callback) {},
   reportTelemetry: function reportTelemetry(data) {},
-  createDownloadManager: function createDownloadManager() {
+  createDownloadManager: function createDownloadManager(options) {
     throw new Error('Not implemented: createDownloadManager');
   },
   createPreferences: function createPreferences() {
     throw new Error('Not implemented: createPreferences');
   },
-  createL10n: function createL10n() {
+  createL10n: function createL10n(options) {
     throw new Error('Not implemented: createL10n');
   },
 
@@ -135,19 +129,6 @@ var PDFViewerApplication = {
   l10n: null,
   isInitialViewSet: false,
   downloadComplete: false,
-  viewerPrefs: {
-    enableWebGL: false,
-    sidebarViewOnLoad: _pdf_sidebar.SidebarView.NONE,
-    pdfBugEnabled: false,
-    showPreviousViewOnLoad: true,
-    defaultZoomValue: '',
-    disablePageMode: false,
-    disablePageLabels: false,
-    renderer: 'canvas',
-    textLayerMode: _ui_utils.TextLayerMode.ENABLE,
-    renderInteractiveForms: false,
-    enablePrintAutoRotate: false
-  },
   isViewerEmbedded: window.parent !== window,
   url: '',
   baseUrl: '',
@@ -158,7 +139,6 @@ var PDFViewerApplication = {
     var _this = this;
 
     this.preferences = this.externalServices.createPreferences();
-    configure(_pdf.PDFJS);
     this.appConfig = appConfig;
     return this._readPreferences().then(function () {
       return _this._parseHashParameters();
@@ -173,106 +153,104 @@ var PDFViewerApplication = {
       _this.l10n.translate(appContainer).then(function () {
         _this.eventBus.dispatch('localized');
       });
-      if (_this.isViewerEmbedded && _pdf.PDFJS.externalLinkTarget === _pdf.LinkTarget.NONE) {
-        _pdf.PDFJS.externalLinkTarget = _pdf.LinkTarget.TOP;
+      if (_this.isViewerEmbedded && _app_options.AppOptions.get('externalLinkTarget') === _pdf.LinkTarget.NONE) {
+        _app_options.AppOptions.set('externalLinkTarget', _pdf.LinkTarget.TOP);
       }
       _this.initialized = true;
     });
   },
   _readPreferences: function _readPreferences() {
-    var preferences = this.preferences,
-        viewerPrefs = this.viewerPrefs;
+    var preferences = this.preferences;
 
     return Promise.all([preferences.get('enableWebGL').then(function resolved(value) {
-      viewerPrefs['enableWebGL'] = value;
+      _app_options.AppOptions.set('enableWebGL', value);
     }), preferences.get('sidebarViewOnLoad').then(function resolved(value) {
-      viewerPrefs['sidebarViewOnLoad'] = value;
+      _app_options.AppOptions.set('sidebarViewOnLoad', value);
     }), preferences.get('pdfBugEnabled').then(function resolved(value) {
-      viewerPrefs['pdfBugEnabled'] = value;
+      _app_options.AppOptions.set('pdfBugEnabled', value);
     }), preferences.get('showPreviousViewOnLoad').then(function resolved(value) {
-      viewerPrefs['showPreviousViewOnLoad'] = value;
+      _app_options.AppOptions.set('showPreviousViewOnLoad', value);
     }), preferences.get('defaultZoomValue').then(function resolved(value) {
-      viewerPrefs['defaultZoomValue'] = value;
+      _app_options.AppOptions.set('defaultZoomValue', value);
     }), preferences.get('textLayerMode').then(function resolved(value) {
-      if (viewerPrefs['textLayerMode'] === _ui_utils.TextLayerMode.DISABLE) {
+      if (_app_options.AppOptions.get('textLayerMode') === _ui_utils.TextLayerMode.DISABLE) {
         return;
       }
-      viewerPrefs['textLayerMode'] = value;
+      _app_options.AppOptions.set('textLayerMode', value);
     }), preferences.get('disableRange').then(function resolved(value) {
-      if (_pdf.PDFJS.disableRange === true) {
+      if (_app_options.AppOptions.get('disableRange') === true) {
         return;
       }
-      _pdf.PDFJS.disableRange = value;
+      _app_options.AppOptions.set('disableRange', value);
     }), preferences.get('disableStream').then(function resolved(value) {
-      if (_pdf.PDFJS.disableStream === true) {
+      if (_app_options.AppOptions.get('disableStream') === true) {
         return;
       }
-      _pdf.PDFJS.disableStream = value;
+      _app_options.AppOptions.set('disableStream', value);
     }), preferences.get('disableAutoFetch').then(function resolved(value) {
-      _pdf.PDFJS.disableAutoFetch = value;
+      _app_options.AppOptions.set('disableAutoFetch', value);
     }), preferences.get('disableFontFace').then(function resolved(value) {
-      if (_pdf.PDFJS.disableFontFace === true) {
+      if (_app_options.AppOptions.get('disableFontFace') === true) {
         return;
       }
-      _pdf.PDFJS.disableFontFace = value;
+      _app_options.AppOptions.set('disableFontFace', value);
     }), preferences.get('useOnlyCssZoom').then(function resolved(value) {
-      _pdf.PDFJS.useOnlyCssZoom = value;
+      _app_options.AppOptions.set('useOnlyCssZoom', value);
     }), preferences.get('externalLinkTarget').then(function resolved(value) {
-      if (_pdf.PDFJS.externalLinkTarget !== _pdf.LinkTarget.NONE) {
+      if (_app_options.AppOptions.get('externalLinkTarget') !== _pdf.LinkTarget.NONE) {
         return;
       }
-      _pdf.PDFJS.externalLinkTarget = value;
+      _app_options.AppOptions.set('externalLinkTarget', value);
     }), preferences.get('renderer').then(function resolved(value) {
-      viewerPrefs['renderer'] = value;
+      _app_options.AppOptions.set('renderer', value);
     }), preferences.get('renderInteractiveForms').then(function resolved(value) {
-      viewerPrefs['renderInteractiveForms'] = value;
+      _app_options.AppOptions.set('renderInteractiveForms', value);
     }), preferences.get('disablePageMode').then(function resolved(value) {
-      viewerPrefs['disablePageMode'] = value;
+      _app_options.AppOptions.set('disablePageMode', value);
     }), preferences.get('disablePageLabels').then(function resolved(value) {
-      viewerPrefs['disablePageLabels'] = value;
+      _app_options.AppOptions.set('disablePageLabels', value);
     }), preferences.get('enablePrintAutoRotate').then(function resolved(value) {
-      viewerPrefs['enablePrintAutoRotate'] = value;
+      _app_options.AppOptions.set('enablePrintAutoRotate', value);
     })]).catch(function (reason) {});
   },
   _parseHashParameters: function _parseHashParameters() {
-    var appConfig = this.appConfig,
-        viewerPrefs = this.viewerPrefs;
+    var appConfig = this.appConfig;
 
     var waitOn = [];
-    if (viewerPrefs['pdfBugEnabled']) {
+    if (_app_options.AppOptions.get('pdfBugEnabled')) {
       var hash = document.location.hash.substring(1);
       var hashParams = (0, _ui_utils.parseQueryString)(hash);
       if ('disableworker' in hashParams && hashParams['disableworker'] === 'true') {
         waitOn.push(loadFakeWorker());
       }
       if ('disablerange' in hashParams) {
-        _pdf.PDFJS.disableRange = hashParams['disablerange'] === 'true';
+        _app_options.AppOptions.set('disableRange', hashParams['disablerange'] === 'true');
       }
       if ('disablestream' in hashParams) {
-        _pdf.PDFJS.disableStream = hashParams['disablestream'] === 'true';
+        _app_options.AppOptions.set('disableStream', hashParams['disablestream'] === 'true');
       }
       if ('disableautofetch' in hashParams) {
-        _pdf.PDFJS.disableAutoFetch = hashParams['disableautofetch'] === 'true';
+        _app_options.AppOptions.set('disableAutoFetch', hashParams['disableautofetch'] === 'true');
       }
       if ('disablefontface' in hashParams) {
-        _pdf.PDFJS.disableFontFace = hashParams['disablefontface'] === 'true';
+        _app_options.AppOptions.set('disableFontFace', hashParams['disablefontface'] === 'true');
       }
       if ('disablehistory' in hashParams) {
-        _pdf.PDFJS.disableHistory = hashParams['disablehistory'] === 'true';
+        _app_options.AppOptions.set('disableHistory', hashParams['disablehistory'] === 'true');
       }
       if ('webgl' in hashParams) {
-        viewerPrefs['enableWebGL'] = hashParams['webgl'] === 'true';
+        _app_options.AppOptions.set('enableWebGL', hashParams['webgl'] === 'true');
       }
       if ('useonlycsszoom' in hashParams) {
-        _pdf.PDFJS.useOnlyCssZoom = hashParams['useonlycsszoom'] === 'true';
+        _app_options.AppOptions.set('useOnlyCssZoom', hashParams['useonlycsszoom'] === 'true');
       }
       if ('verbosity' in hashParams) {
-        _pdf.PDFJS.verbosity = hashParams['verbosity'] | 0;
+        _app_options.AppOptions.set('verbosity', hashParams['verbosity'] | 0);
       }
       if ('textlayer' in hashParams) {
         switch (hashParams['textlayer']) {
           case 'off':
-            viewerPrefs['textLayerMode'] = _ui_utils.TextLayerMode.DISABLE;
+            _app_options.AppOptions.set('textLayerMode', _ui_utils.TextLayerMode.DISABLE);
             break;
           case 'visible':
           case 'shadow':
@@ -283,18 +261,18 @@ var PDFViewerApplication = {
         }
       }
       if ('pdfbug' in hashParams) {
-        _pdf.PDFJS.pdfBug = true;
+        _app_options.AppOptions.set('pdfBug', true);
         var enabled = hashParams['pdfbug'].split(',');
         waitOn.push(loadAndEnablePDFBug(enabled));
       }
       if ('locale' in hashParams) {
-        _pdf.PDFJS.locale = hashParams['locale'];
+        _app_options.AppOptions.set('locale', hashParams['locale']);
       }
     }
     return Promise.all(waitOn);
   },
   _initializeL10n: function _initializeL10n() {
-    this.l10n = this.externalServices.createL10n({ locale: _pdf.PDFJS.locale });
+    this.l10n = this.externalServices.createL10n({ locale: _app_options.AppOptions.get('locale') });
     return this.l10n.getDirection().then(function (dir) {
       document.getElementsByTagName('html')[0].dir = dir;
     });
@@ -302,8 +280,7 @@ var PDFViewerApplication = {
   _initializeViewerComponents: function _initializeViewerComponents() {
     var _this2 = this;
 
-    var appConfig = this.appConfig,
-        viewerPrefs = this.viewerPrefs;
+    var appConfig = this.appConfig;
 
     return new Promise(function (resolve, reject) {
       _this2.overlayManager = new _overlay_manager.OverlayManager();
@@ -314,11 +291,11 @@ var PDFViewerApplication = {
       _this2.pdfRenderingQueue = pdfRenderingQueue;
       var pdfLinkService = new _pdf_link_service.PDFLinkService({
         eventBus: eventBus,
-        externalLinkTarget: _pdf.PDFJS.externalLinkTarget,
-        externalLinkRel: _pdf.PDFJS.externalLinkRel
+        externalLinkTarget: _app_options.AppOptions.get('externalLinkTarget'),
+        externalLinkRel: _app_options.AppOptions.get('externalLinkRel')
       });
       _this2.pdfLinkService = pdfLinkService;
-      var downloadManager = _this2.externalServices.createDownloadManager();
+      var downloadManager = _this2.externalServices.createDownloadManager({ disableCreateObjectURL: _app_options.AppOptions.get('disableCreateObjectURL') });
       _this2.downloadManager = downloadManager;
       var container = appConfig.mainContainer;
       var viewer = appConfig.viewerContainer;
@@ -329,15 +306,15 @@ var PDFViewerApplication = {
         renderingQueue: pdfRenderingQueue,
         linkService: pdfLinkService,
         downloadManager: downloadManager,
-        renderer: viewerPrefs['renderer'],
-        enableWebGL: viewerPrefs['enableWebGL'],
+        renderer: _app_options.AppOptions.get('renderer'),
+        enableWebGL: _app_options.AppOptions.get('enableWebGL'),
         l10n: _this2.l10n,
-        textLayerMode: viewerPrefs['textLayerMode'],
-        imageResourcesPath: _pdf.PDFJS.imageResourcesPath,
-        renderInteractiveForms: viewerPrefs['renderInteractiveForms'],
-        enablePrintAutoRotate: viewerPrefs['enablePrintAutoRotate'],
-        useOnlyCssZoom: _pdf.PDFJS.useOnlyCssZoom,
-        maxCanvasPixels: _pdf.PDFJS.maxCanvasPixels
+        textLayerMode: _app_options.AppOptions.get('textLayerMode'),
+        imageResourcesPath: _app_options.AppOptions.get('imageResourcesPath'),
+        renderInteractiveForms: _app_options.AppOptions.get('renderInteractiveForms'),
+        enablePrintAutoRotate: _app_options.AppOptions.get('enablePrintAutoRotate'),
+        useOnlyCssZoom: _app_options.AppOptions.get('useOnlyCssZoom'),
+        maxCanvasPixels: _app_options.AppOptions.get('maxCanvasPixels')
       });
       pdfRenderingQueue.setViewer(_this2.pdfViewer);
       pdfLinkService.setViewer(_this2.pdfViewer);
@@ -459,7 +436,7 @@ var PDFViewerApplication = {
     if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false || document.msFullscreenEnabled === false) {
       support = false;
     }
-    if (support && _viewer_compatibility.viewerCompatibilityParams['disableFullscreen'] === true) {
+    if (support && _app_options.AppOptions.get('disableFullscreen') === true) {
       support = false;
     }
     return (0, _pdf.shadow)(this, 'supportsFullscreen', support);
@@ -544,6 +521,10 @@ var PDFViewerApplication = {
         return _this3.open(file, args);
       });
     }
+    var workerParameters = _app_options.AppOptions.getAll('worker');
+    for (var key in workerParameters) {
+      _pdf.GlobalWorkerOptions[key] = workerParameters[key];
+    }
     var parameters = Object.create(null);
     if (typeof file === 'string') {
       this.setTitleUsingUrl(file);
@@ -554,7 +535,10 @@ var PDFViewerApplication = {
       this.setTitleUsingUrl(file.originalUrl);
       parameters.url = file.url;
     }
-    parameters.verbosity = _pdf.PDFJS.verbosity;
+    var apiParameters = _app_options.AppOptions.getAll('api');
+    for (var _key in apiParameters) {
+      parameters[_key] = apiParameters[_key];
+    }
     if (args) {
       for (var prop in args) {
         if (prop === 'length') {
@@ -685,7 +669,8 @@ var PDFViewerApplication = {
     var percent = Math.round(level * 100);
     if (percent > this.loadingBar.percent || isNaN(percent)) {
       this.loadingBar.percent = percent;
-      if (_pdf.PDFJS.disableAutoFetch && percent) {
+      var disableAutoFetch = this.pdfDocument ? this.pdfDocument.loadingParams['disableAutoFetch'] : _app_options.AppOptions.get('disableAutoFetch');
+      if (disableAutoFetch && percent) {
         if (this.disableAutoFetchLoadingBarTimeout) {
           clearTimeout(this.disableAutoFetchLoadingBarTimeout);
           this.disableAutoFetchLoadingBarTimeout = null;
@@ -727,8 +712,8 @@ var PDFViewerApplication = {
     pdfThumbnailViewer.setDocument(pdfDocument);
     firstPagePromise.then(function (pdfPage) {
       _this6.loadingBar.setWidth(_this6.appConfig.viewerContainer);
-      if (!_pdf.PDFJS.disableHistory && !_this6.isViewerEmbedded) {
-        var resetHistory = !_this6.viewerPrefs['showPreviousViewOnLoad'];
+      if (!_app_options.AppOptions.get('disableHistory') && !_this6.isViewerEmbedded) {
+        var resetHistory = !_app_options.AppOptions.get('showPreviousViewOnLoad');
         _this6.pdfHistory.initialize(id, resetHistory);
         if (_this6.pdfHistory.initialBookmark) {
           _this6.initialBookmark = _this6.pdfHistory.initialBookmark;
@@ -754,15 +739,15 @@ var PDFViewerApplication = {
             values = _ref3$ === undefined ? {} : _ref3$,
             pageMode = _ref3[1];
 
-        var hash = _this6.viewerPrefs['defaultZoomValue'] ? 'zoom=' + _this6.viewerPrefs['defaultZoomValue'] : null;
+        var hash = _app_options.AppOptions.get('defaultZoomValue') ? 'zoom=' + _app_options.AppOptions.get('defaultZoomValue') : null;
         var rotation = null;
-        var sidebarView = _this6.viewerPrefs['sidebarViewOnLoad'];
-        if (values.exists && _this6.viewerPrefs['showPreviousViewOnLoad']) {
-          hash = 'page=' + values.page + '&zoom=' + (_this6.viewerPrefs['defaultZoomValue'] || values.zoom) + ',' + values.scrollLeft + ',' + values.scrollTop;
+        var sidebarView = _app_options.AppOptions.get('sidebarViewOnLoad');
+        if (values.exists && _app_options.AppOptions.get('showPreviousViewOnLoad')) {
+          hash = 'page=' + values.page + '&zoom=' + (_app_options.AppOptions.get('defaultZoomValue') || values.zoom) + ',' + values.scrollLeft + ',' + values.scrollTop;
           rotation = parseInt(values.rotation, 10);
           sidebarView = sidebarView || values.sidebarView | 0;
         }
-        if (pageMode && !_this6.viewerPrefs['disablePageMode']) {
+        if (pageMode && !_app_options.AppOptions.get('disablePageMode')) {
           sidebarView = sidebarView || apiPageModeToSidebarView(pageMode);
         }
         return {
@@ -800,7 +785,7 @@ var PDFViewerApplication = {
       });
     });
     pdfDocument.getPageLabels().then(function (labels) {
-      if (!labels || _this6.viewerPrefs['disablePageLabels']) {
+      if (!labels || _app_options.AppOptions.get('disablePageLabels')) {
         return;
       }
       var i = 0,
@@ -864,7 +849,7 @@ var PDFViewerApplication = {
       _this6.documentInfo = info;
       _this6.metadata = metadata;
       _this6.contentDispositionFilename = contentDispositionFilename;
-      console.log('PDF ' + pdfDocument.fingerprint + ' [' + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + ' / ' + (info.Creator || '-').trim() + ']' + ' (PDF.js: ' + (_pdf.version || '-') + (_this6.viewerPrefs['enableWebGL'] ? ' [WebGL]' : '') + ')');
+      console.log('PDF ' + pdfDocument.fingerprint + ' [' + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + ' / ' + (info.Creator || '-').trim() + ']' + ' (PDF.js: ' + (_pdf.version || '-') + (_app_options.AppOptions.get('enableWebGL') ? ' [WebGL]' : '') + ')');
       var pdfTitle = void 0;
       if (metadata && metadata.has('dc:title')) {
         var title = metadata.get('dc:title');
@@ -1125,6 +1110,9 @@ var validateFileURL = void 0;
 }
 function loadFakeWorker() {
   return new Promise(function (resolve, reject) {
+    if (!_pdf.GlobalWorkerOptions.workerSrc) {
+      _pdf.GlobalWorkerOptions.workerSrc = _app_options.AppOptions.get('workerSrc');
+    }
     var script = document.createElement('script');
     script.src = _pdf.PDFWorker.getWorkerSrc();
     script.onload = function () {
@@ -1157,7 +1145,7 @@ function webViewerInitialized() {
   var file = void 0;
   var queryString = document.location.search.substring(1);
   var params = (0, _ui_utils.parseQueryString)(queryString);
-  file = 'file' in params ? params.file : appConfig.defaultUrl;
+  file = 'file' in params ? params.file : _app_options.AppOptions.get('defaultUrl');
   validateFileURL(file);
   var fileInput = document.createElement('input');
   fileInput.id = appConfig.openFileInputName;
@@ -1349,7 +1337,7 @@ var webViewerFileInputChange = void 0;
 {
   webViewerFileInputChange = function webViewerFileInputChange(evt) {
     var file = evt.fileInput.files[0];
-    if (!_pdf.PDFJS.disableCreateObjectURL && URL.createObjectURL) {
+    if (URL.createObjectURL && !_app_options.AppOptions.get('disableCreateObjectURL')) {
       PDFViewerApplication.open(URL.createObjectURL(file));
     } else {
       var fileReader = new FileReader();

+ 231 - 0
lib/web/app_options.js

@@ -0,0 +1,231 @@
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2017 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @licend The above is the entire license notice for the
+ * Javascript code in this page
+ */
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.OptionKind = exports.AppOptions = undefined;
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+var _pdf = require('../pdf');
+
+var _viewer_compatibility = require('./viewer_compatibility');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var OptionKind = {
+  VIEWER: 'viewer',
+  API: 'api',
+  WORKER: 'worker'
+};
+var defaultOptions = {
+  defaultUrl: {
+    value: 'compressed.tracemonkey-pldi-09.pdf',
+    kind: OptionKind.VIEWER
+  },
+  defaultZoomValue: {
+    value: '',
+    kind: OptionKind.VIEWER
+  },
+  disableFullscreen: {
+    value: _viewer_compatibility.viewerCompatibilityParams.disableFullscreen || false,
+    kind: OptionKind.VIEWER
+  },
+  disableHistory: {
+    value: false,
+    kind: OptionKind.VIEWER
+  },
+  disablePageLabels: {
+    value: false,
+    kind: OptionKind.VIEWER
+  },
+  disablePageMode: {
+    value: false,
+    kind: OptionKind.VIEWER
+  },
+  enablePrintAutoRotate: {
+    value: false,
+    kind: OptionKind.VIEWER
+  },
+  enableWebGL: {
+    value: false,
+    kind: OptionKind.VIEWER
+  },
+  externalLinkRel: {
+    value: 'noopener noreferrer nofollow',
+    kind: OptionKind.VIEWER
+  },
+  externalLinkTarget: {
+    value: 0,
+    kind: OptionKind.VIEWER
+  },
+  imageResourcesPath: {
+    value: './images/',
+    kind: OptionKind.VIEWER
+  },
+  locale: {
+    value: typeof navigator !== 'undefined' ? navigator.language : 'en-US',
+    kind: OptionKind.VIEWER
+  },
+  maxCanvasPixels: {
+    value: _viewer_compatibility.viewerCompatibilityParams.maxCanvasPixels || 16777216,
+    kind: OptionKind.VIEWER
+  },
+  pdfBugEnabled: {
+    value: false,
+    kind: OptionKind.VIEWER
+  },
+  renderer: {
+    value: 'canvas',
+    kind: OptionKind.VIEWER
+  },
+  renderInteractiveForms: {
+    value: false,
+    kind: OptionKind.VIEWER
+  },
+  showPreviousViewOnLoad: {
+    value: true,
+    kind: OptionKind.VIEWER
+  },
+  sidebarViewOnLoad: {
+    value: 0,
+    kind: OptionKind.VIEWER
+  },
+  textLayerMode: {
+    value: 1,
+    kind: OptionKind.VIEWER
+  },
+  useOnlyCssZoom: {
+    value: false,
+    kind: OptionKind.VIEWER
+  },
+  cMapPacked: {
+    value: true,
+    kind: OptionKind.API
+  },
+  cMapUrl: {
+    value: '../web/cmaps/',
+    kind: OptionKind.API
+  },
+  disableAutoFetch: {
+    value: false,
+    kind: OptionKind.API
+  },
+  disableCreateObjectURL: {
+    value: _pdf.apiCompatibilityParams.disableCreateObjectURL || false,
+    kind: OptionKind.API
+  },
+  disableFontFace: {
+    value: false,
+    kind: OptionKind.API
+  },
+  disableRange: {
+    value: _pdf.apiCompatibilityParams.disableRange || false,
+    kind: OptionKind.API
+  },
+  disableStream: {
+    value: _pdf.apiCompatibilityParams.disableStream || false,
+    kind: OptionKind.API
+  },
+  isEvalSupported: {
+    value: true,
+    kind: OptionKind.API
+  },
+  maxImageSize: {
+    value: -1,
+    kind: OptionKind.API
+  },
+  pdfBug: {
+    value: false,
+    kind: OptionKind.API
+  },
+  postMessageTransfers: {
+    value: true,
+    kind: OptionKind.API
+  },
+  verbosity: {
+    value: 1,
+    kind: OptionKind.API
+  },
+  workerPort: {
+    value: null,
+    kind: OptionKind.WORKER
+  },
+  workerSrc: {
+    value: '../build/pdf.worker.js',
+    kind: OptionKind.WORKER
+  }
+};
+var userOptions = Object.create(null);
+
+var AppOptions = function () {
+  function AppOptions() {
+    _classCallCheck(this, AppOptions);
+
+    throw new Error('Cannot initialize AppOptions.');
+  }
+
+  _createClass(AppOptions, null, [{
+    key: 'get',
+    value: function get(name) {
+      var defaultOption = defaultOptions[name],
+          userOption = userOptions[name];
+      if (userOption !== undefined) {
+        return userOption;
+      }
+      return defaultOption !== undefined ? defaultOption.value : undefined;
+    }
+  }, {
+    key: 'getAll',
+    value: function getAll() {
+      var kind = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
+
+      var options = Object.create(null);
+      for (var name in defaultOptions) {
+        var defaultOption = defaultOptions[name],
+            userOption = userOptions[name];
+        if (kind && defaultOption.kind !== kind) {
+          continue;
+        }
+        options[name] = userOption !== undefined ? userOption : defaultOption.value;
+      }
+      return options;
+    }
+  }, {
+    key: 'set',
+    value: function set(name, value) {
+      userOptions[name] = value;
+    }
+  }, {
+    key: 'remove',
+    value: function remove(name) {
+      delete userOptions[name];
+    }
+  }]);
+
+  return AppOptions;
+}();
+
+exports.AppOptions = AppOptions;
+exports.OptionKind = OptionKind;

+ 3 - 3
lib/web/base_viewer.js

@@ -28,14 +28,14 @@ exports.BaseViewer = undefined;
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
-var _pdf = require('../pdf');
-
 var _ui_utils = require('./ui_utils');
 
 var _pdf_rendering_queue = require('./pdf_rendering_queue');
 
 var _annotation_layer_builder = require('./annotation_layer_builder');
 
+var _pdf = require('../pdf');
+
 var _dom_events = require('./dom_events');
 
 var _pdf_page_view = require('./pdf_page_view');
@@ -219,7 +219,7 @@ var BaseViewer = function () {
           _this._pages.push(pageView);
         }
         onePageRenderedCapability.promise.then(function () {
-          if (_pdf.PDFJS.disableAutoFetch) {
+          if (pdfDocument.loadingParams['disableAutoFetch']) {
             pagesCapability.resolve();
             return;
           }

+ 2 - 2
lib/web/chromecom.js

@@ -321,8 +321,8 @@ ChromeExternalServices.initPassiveLoading = function (callbacks) {
     callbacks.onOpenWithURL(url, length, originalURL);
   });
 };
-ChromeExternalServices.createDownloadManager = function () {
-  return new _download_manager.DownloadManager();
+ChromeExternalServices.createDownloadManager = function (options) {
+  return new _download_manager.DownloadManager(options);
 };
 ChromeExternalServices.createPreferences = function () {
   return new ChromePreferences();

+ 9 - 3
lib/web/download_manager.js

@@ -33,6 +33,7 @@ var _pdf = require('../pdf');
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 ;
+var DISABLE_CREATE_OBJECT_URL = _pdf.apiCompatibilityParams.disableCreateObjectURL || false;
 function _download(blobUrl, filename) {
   var a = document.createElement('a');
   if (!a.click) {
@@ -49,8 +50,13 @@ function _download(blobUrl, filename) {
 }
 
 var DownloadManager = function () {
-  function DownloadManager() {
+  function DownloadManager(_ref) {
+    var _ref$disableCreateObj = _ref.disableCreateObjectURL,
+        disableCreateObjectURL = _ref$disableCreateObj === undefined ? DISABLE_CREATE_OBJECT_URL : _ref$disableCreateObj;
+
     _classCallCheck(this, DownloadManager);
+
+    this.disableCreateObjectURL = disableCreateObjectURL;
   }
 
   _createClass(DownloadManager, [{
@@ -67,7 +73,7 @@ var DownloadManager = function () {
       if (navigator.msSaveBlob) {
         return navigator.msSaveBlob(new Blob([data], { type: contentType }), filename);
       }
-      var blobUrl = (0, _pdf.createObjectURL)(data, contentType, _pdf.PDFJS.disableCreateObjectURL);
+      var blobUrl = (0, _pdf.createObjectURL)(data, contentType, this.disableCreateObjectURL);
       _download(blobUrl, filename);
     }
   }, {
@@ -79,7 +85,7 @@ var DownloadManager = function () {
         }
         return;
       }
-      if (_pdf.PDFJS.disableCreateObjectURL) {
+      if (this.disableCreateObjectURL) {
         this.downloadUrl(url, filename);
         return;
       }

+ 6 - 4
lib/web/firefoxcom.js

@@ -88,8 +88,10 @@ var FirefoxCom = function FirefoxComClosure() {
 }();
 
 var DownloadManager = function () {
-  function DownloadManager() {
+  function DownloadManager(options) {
     _classCallCheck(this, DownloadManager);
+
+    this.disableCreateObjectURL = false;
   }
 
   _createClass(DownloadManager, [{
@@ -103,7 +105,7 @@ var DownloadManager = function () {
   }, {
     key: 'downloadData',
     value: function downloadData(data, filename, contentType) {
-      var blobUrl = (0, _pdf.createObjectURL)(data, contentType, false);
+      var blobUrl = (0, _pdf.createObjectURL)(data, contentType);
       FirefoxCom.request('download', {
         blobUrl: blobUrl,
         originalUrl: blobUrl,
@@ -275,8 +277,8 @@ _app.PDFViewerApplication.externalServices = {
   reportTelemetry: function reportTelemetry(data) {
     FirefoxCom.request('reportTelemetry', JSON.stringify(data));
   },
-  createDownloadManager: function createDownloadManager() {
-    return new DownloadManager();
+  createDownloadManager: function createDownloadManager(options) {
+    return new DownloadManager(options);
   },
   createPreferences: function createPreferences() {
     return new FirefoxPreferences();

+ 7 - 4
lib/web/genericcom.js

@@ -76,14 +76,17 @@ var GenericPreferences = function (_BasePreferences) {
 }(_preferences.BasePreferences);
 
 var GenericExternalServices = Object.create(_app.DefaultExternalServices);
-GenericExternalServices.createDownloadManager = function () {
-  return new _download_manager.DownloadManager();
+GenericExternalServices.createDownloadManager = function (options) {
+  return new _download_manager.DownloadManager(options);
 };
 GenericExternalServices.createPreferences = function () {
   return new GenericPreferences();
 };
-GenericExternalServices.createL10n = function (options) {
-  return new _genericl10n.GenericL10n(options.locale);
+GenericExternalServices.createL10n = function (_ref) {
+  var _ref$locale = _ref.locale,
+      locale = _ref$locale === undefined ? 'en-US' : _ref$locale;
+
+  return new _genericl10n.GenericL10n(locale);
 };
 _app.PDFViewerApplication.externalServices = GenericExternalServices;
 exports.GenericCom = GenericCom;

+ 3 - 3
lib/web/pdf_attachment_viewer.js

@@ -70,8 +70,8 @@ var PDFAttachmentViewer = function () {
   }, {
     key: '_bindPdfLink',
     value: function _bindPdfLink(button, content, filename) {
-      if (_pdf.PDFJS.disableCreateObjectURL) {
-        throw new Error('bindPdfLink: ' + 'Unsupported "PDFJS.disableCreateObjectURL" value.');
+      if (this.downloadManager.disableCreateObjectURL) {
+        throw new Error('bindPdfLink: Unsupported "disableCreateObjectURL" value.');
       }
       var blobUrl = void 0;
       button.onclick = function () {
@@ -121,7 +121,7 @@ var PDFAttachmentViewer = function () {
         div.className = 'attachmentsItem';
         var button = document.createElement('button');
         button.textContent = filename;
-        if (/\.pdf$/i.test(filename) && !_pdf.PDFJS.disableCreateObjectURL) {
+        if (/\.pdf$/i.test(filename) && !this.downloadManager.disableCreateObjectURL) {
           this._bindPdfLink(button, item.content, filename);
         } else {
           this._bindLink(button, item.content, filename);

+ 4 - 6
lib/web/pdf_outline_viewer.js

@@ -67,8 +67,6 @@ var PDFOutlineViewer = function () {
   }, {
     key: '_bindLink',
     value: function _bindLink(element, _ref2) {
-      var _this = this;
-
       var url = _ref2.url,
           newWindow = _ref2.newWindow,
           dest = _ref2.dest;
@@ -82,10 +80,10 @@ var PDFOutlineViewer = function () {
         });
         return;
       }
-      element.href = this.linkService.getDestinationHash(dest);
+      element.href = linkService.getDestinationHash(dest);
       element.onclick = function () {
         if (dest) {
-          _this.linkService.navigateTo(dest);
+          linkService.navigateTo(dest);
         }
         return false;
       };
@@ -110,7 +108,7 @@ var PDFOutlineViewer = function () {
   }, {
     key: '_addToggleButton',
     value: function _addToggleButton(div) {
-      var _this2 = this;
+      var _this = this;
 
       var toggler = document.createElement('div');
       toggler.className = 'outlineItemToggler';
@@ -119,7 +117,7 @@ var PDFOutlineViewer = function () {
         toggler.classList.toggle('outlineItemsHidden');
         if (evt.shiftKey) {
           var shouldShowAll = !toggler.classList.contains('outlineItemsHidden');
-          _this2._toggleOutlineItem(div, shouldShowAll);
+          _this._toggleOutlineItem(div, shouldShowAll);
         }
       };
       div.insertBefore(toggler, div.firstChild);

+ 2 - 3
lib/web/pdf_print_service.js

@@ -30,8 +30,6 @@ var _ui_utils = require('./ui_utils');
 
 var _app = require('./app');
 
-var _pdf = require('../pdf');
-
 var activeService = null;
 var overlayManager = null;
 function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {
@@ -67,6 +65,7 @@ function PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n) {
   this.pagesOverview = pagesOverview;
   this.printContainer = printContainer;
   this.l10n = l10n || _ui_utils.NullL10n;
+  this.disableCreateObjectURL = pdfDocument.loadingParams['disableCreateObjectURL'];
   this.currentPage = -1;
   this.scratchCanvas = document.createElement('canvas');
 }
@@ -130,7 +129,7 @@ PDFPrintService.prototype = {
     img.style.width = printItem.width;
     img.style.height = printItem.height;
     var scratchCanvas = this.scratchCanvas;
-    if ('toBlob' in scratchCanvas && !_pdf.PDFJS.disableCreateObjectURL) {
+    if ('toBlob' in scratchCanvas && !this.disableCreateObjectURL) {
       scratchCanvas.toBlob(function (blob) {
         img.src = URL.createObjectURL(blob);
       });

+ 19 - 26
lib/web/pdf_viewer.component.js

@@ -24,7 +24,7 @@
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.PDFJS = undefined;
+exports.NullL10n = exports.GenericL10n = exports.ProgressBar = exports.DownloadManager = exports.EventBus = exports.PDFFindController = exports.PDFHistory = exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = exports.DefaultTextLayerFactory = exports.TextLayerBuilder = exports.SimpleLinkService = exports.PDFLinkService = exports.PDFPageView = exports.PDFSinglePageViewer = exports.PDFViewer = undefined;
 
 var _annotation_layer_builder = require('./annotation_layer_builder.js');
 
@@ -42,34 +42,27 @@ var _pdf_find_controller = require('./pdf_find_controller.js');
 
 var _pdf_history = require('./pdf_history.js');
 
-var _pdfjs = require('./pdfjs.js');
-
-var _pdfjs2 = _interopRequireDefault(_pdfjs);
-
 var _pdf_page_view = require('./pdf_page_view.js');
 
 var _pdf_single_page_viewer = require('./pdf_single_page_viewer');
 
 var _pdf_viewer = require('./pdf_viewer.js');
 
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var PDFJS = _pdfjs2.default.PDFJS;
-
-PDFJS.PDFViewer = _pdf_viewer.PDFViewer;
-PDFJS.PDFSinglePageViewer = _pdf_single_page_viewer.PDFSinglePageViewer;
-PDFJS.PDFPageView = _pdf_page_view.PDFPageView;
-PDFJS.PDFLinkService = _pdf_link_service.PDFLinkService;
-PDFJS.SimpleLinkService = _pdf_link_service.SimpleLinkService;
-PDFJS.TextLayerBuilder = _text_layer_builder.TextLayerBuilder;
-PDFJS.DefaultTextLayerFactory = _text_layer_builder.DefaultTextLayerFactory;
-PDFJS.AnnotationLayerBuilder = _annotation_layer_builder.AnnotationLayerBuilder;
-PDFJS.DefaultAnnotationLayerFactory = _annotation_layer_builder.DefaultAnnotationLayerFactory;
-PDFJS.PDFHistory = _pdf_history.PDFHistory;
-PDFJS.PDFFindController = _pdf_find_controller.PDFFindController;
-PDFJS.EventBus = _ui_utils.EventBus;
-PDFJS.DownloadManager = _download_manager.DownloadManager;
-PDFJS.ProgressBar = _ui_utils.ProgressBar;
-PDFJS.GenericL10n = _genericl10n.GenericL10n;
-PDFJS.NullL10n = _ui_utils.NullL10n;
-exports.PDFJS = PDFJS;
+var pdfjsVersion = '2.0.419';
+var pdfjsBuild = 'c33bf800';
+exports.PDFViewer = _pdf_viewer.PDFViewer;
+exports.PDFSinglePageViewer = _pdf_single_page_viewer.PDFSinglePageViewer;
+exports.PDFPageView = _pdf_page_view.PDFPageView;
+exports.PDFLinkService = _pdf_link_service.PDFLinkService;
+exports.SimpleLinkService = _pdf_link_service.SimpleLinkService;
+exports.TextLayerBuilder = _text_layer_builder.TextLayerBuilder;
+exports.DefaultTextLayerFactory = _text_layer_builder.DefaultTextLayerFactory;
+exports.AnnotationLayerBuilder = _annotation_layer_builder.AnnotationLayerBuilder;
+exports.DefaultAnnotationLayerFactory = _annotation_layer_builder.DefaultAnnotationLayerFactory;
+exports.PDFHistory = _pdf_history.PDFHistory;
+exports.PDFFindController = _pdf_find_controller.PDFFindController;
+exports.EventBus = _ui_utils.EventBus;
+exports.DownloadManager = _download_manager.DownloadManager;
+exports.ProgressBar = _ui_utils.ProgressBar;
+exports.GenericL10n = _genericl10n.GenericL10n;
+exports.NullL10n = _ui_utils.NullL10n;

+ 0 - 6
lib/web/ui_utils.js

@@ -77,12 +77,6 @@ var NullL10n = {
     return Promise.resolve();
   }
 };
-_pdf.PDFJS.useOnlyCssZoom = _pdf.PDFJS.useOnlyCssZoom === undefined ? false : _pdf.PDFJS.useOnlyCssZoom;
-_pdf.PDFJS.maxCanvasPixels = _pdf.PDFJS.maxCanvasPixels === undefined ? 16777216 : _pdf.PDFJS.maxCanvasPixels;
-_pdf.PDFJS.disableHistory = _pdf.PDFJS.disableHistory === undefined ? false : _pdf.PDFJS.disableHistory;
-{
-  _pdf.PDFJS.locale = (_pdf.PDFJS.locale === undefined && typeof navigator !== 'undefined' ? navigator.language : _pdf.PDFJS.locale) || 'en-US';
-}
 function getOutputScale(ctx) {
   var devicePixelRatio = window.devicePixelRatio || 1;
   var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "pdfjs-dist",
-  "version": "2.0.402",
+  "version": "2.0.419",
   "main": "build/pdf.js",
   "description": "Generic build of Mozilla's PDF.js library.",
   "keywords": [

+ 64 - 71
web/pdf_viewer.js

@@ -102,21 +102,6 @@ return /******/ (function(modules) { // webpackBootstrap
 "use strict";
 
 
-var pdfjsLib = void 0;
-if (typeof window !== 'undefined' && window['pdfjs-dist/build/pdf']) {
-  pdfjsLib = window['pdfjs-dist/build/pdf'];
-} else {
-  pdfjsLib = require('../build/pdf.js');
-}
-module.exports = pdfjsLib;
-
-/***/ }),
-/* 1 */
-/***/ (function(module, exports, __w_pdfjs_require__) {
-
-"use strict";
-
-
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
@@ -126,7 +111,7 @@ var _createClass = function () { function defineProperties(target, props) { for
 
 var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
 
-var _pdfjsLib = __w_pdfjs_require__(0);
+var _pdfjsLib = __w_pdfjs_require__(1);
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
@@ -173,12 +158,6 @@ var NullL10n = {
     return Promise.resolve();
   }
 };
-_pdfjsLib.PDFJS.useOnlyCssZoom = _pdfjsLib.PDFJS.useOnlyCssZoom === undefined ? false : _pdfjsLib.PDFJS.useOnlyCssZoom;
-_pdfjsLib.PDFJS.maxCanvasPixels = _pdfjsLib.PDFJS.maxCanvasPixels === undefined ? 16777216 : _pdfjsLib.PDFJS.maxCanvasPixels;
-_pdfjsLib.PDFJS.disableHistory = _pdfjsLib.PDFJS.disableHistory === undefined ? false : _pdfjsLib.PDFJS.disableHistory;
-{
-  _pdfjsLib.PDFJS.locale = (_pdfjsLib.PDFJS.locale === undefined && typeof navigator !== 'undefined' ? navigator.language : _pdfjsLib.PDFJS.locale) || 'en-US';
-}
 function getOutputScale(ctx) {
   var devicePixelRatio = window.devicePixelRatio || 1;
   var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1;
@@ -653,6 +632,21 @@ exports.localized = localized;
 exports.WaitOnType = WaitOnType;
 exports.waitOnEventOrTimeout = waitOnEventOrTimeout;
 
+/***/ }),
+/* 1 */
+/***/ (function(module, exports, __w_pdfjs_require__) {
+
+"use strict";
+
+
+var pdfjsLib = void 0;
+if (typeof window !== 'undefined' && window['pdfjs-dist/build/pdf']) {
+  pdfjsLib = window['pdfjs-dist/build/pdf'];
+} else {
+  pdfjsLib = require('../build/pdf.js');
+}
+module.exports = pdfjsLib;
+
 /***/ }),
 /* 2 */
 /***/ (function(module, exports, __w_pdfjs_require__) {
@@ -665,7 +659,7 @@ Object.defineProperty(exports, "__esModule", {
 });
 exports.getGlobalEventBus = exports.attachDOMEventsToEventBus = undefined;
 
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
 function attachDOMEventsToEventBus(eventBus) {
   eventBus.on('documentload', function () {
@@ -793,7 +787,7 @@ var _createClass = function () { function defineProperties(target, props) { for
 
 var _dom_events = __w_pdfjs_require__(2);
 
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
@@ -1208,9 +1202,9 @@ exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = undefin
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
-var _pdfjsLib = __w_pdfjs_require__(0);
+var _pdfjsLib = __w_pdfjs_require__(1);
 
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
 var _pdf_link_service = __w_pdfjs_require__(3);
 
@@ -1341,7 +1335,7 @@ var _createClass = function () { function defineProperties(target, props) { for
 
 var _dom_events = __w_pdfjs_require__(2);
 
-var _pdfjsLib = __w_pdfjs_require__(0);
+var _pdfjsLib = __w_pdfjs_require__(1);
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
@@ -1683,9 +1677,9 @@ exports.PDFPageView = undefined;
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
-var _pdfjsLib = __w_pdfjs_require__(0);
+var _pdfjsLib = __w_pdfjs_require__(1);
 
 var _dom_events = __w_pdfjs_require__(2);
 
@@ -2357,14 +2351,14 @@ exports.BaseViewer = undefined;
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
-var _pdfjsLib = __w_pdfjs_require__(0);
-
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
 var _pdf_rendering_queue = __w_pdfjs_require__(7);
 
 var _annotation_layer_builder = __w_pdfjs_require__(4);
 
+var _pdfjsLib = __w_pdfjs_require__(1);
+
 var _dom_events = __w_pdfjs_require__(2);
 
 var _pdf_page_view = __w_pdfjs_require__(6);
@@ -2548,7 +2542,7 @@ var BaseViewer = function () {
           _this._pages.push(pageView);
         }
         onePageRenderedCapability.promise.then(function () {
-          if (_pdfjsLib.PDFJS.disableAutoFetch) {
+          if (pdfDocument.loadingParams['disableAutoFetch']) {
             pagesCapability.resolve();
             return;
           }
@@ -3162,13 +3156,13 @@ exports.BaseViewer = BaseViewer;
 Object.defineProperty(exports, "__esModule", {
   value: true
 });
-exports.PDFJS = undefined;
+exports.NullL10n = exports.GenericL10n = exports.ProgressBar = exports.DownloadManager = exports.EventBus = exports.PDFFindController = exports.PDFHistory = exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = exports.DefaultTextLayerFactory = exports.TextLayerBuilder = exports.SimpleLinkService = exports.PDFLinkService = exports.PDFPageView = exports.PDFSinglePageViewer = exports.PDFViewer = undefined;
 
 var _annotation_layer_builder = __w_pdfjs_require__(4);
 
 var _text_layer_builder = __w_pdfjs_require__(5);
 
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
 var _pdf_link_service = __w_pdfjs_require__(3);
 
@@ -3180,37 +3174,30 @@ var _pdf_find_controller = __w_pdfjs_require__(13);
 
 var _pdf_history = __w_pdfjs_require__(14);
 
-var _pdfjs = __w_pdfjs_require__(0);
-
-var _pdfjs2 = _interopRequireDefault(_pdfjs);
-
 var _pdf_page_view = __w_pdfjs_require__(6);
 
 var _pdf_single_page_viewer = __w_pdfjs_require__(16);
 
 var _pdf_viewer = __w_pdfjs_require__(17);
 
-function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-var PDFJS = _pdfjs2.default.PDFJS;
-
-PDFJS.PDFViewer = _pdf_viewer.PDFViewer;
-PDFJS.PDFSinglePageViewer = _pdf_single_page_viewer.PDFSinglePageViewer;
-PDFJS.PDFPageView = _pdf_page_view.PDFPageView;
-PDFJS.PDFLinkService = _pdf_link_service.PDFLinkService;
-PDFJS.SimpleLinkService = _pdf_link_service.SimpleLinkService;
-PDFJS.TextLayerBuilder = _text_layer_builder.TextLayerBuilder;
-PDFJS.DefaultTextLayerFactory = _text_layer_builder.DefaultTextLayerFactory;
-PDFJS.AnnotationLayerBuilder = _annotation_layer_builder.AnnotationLayerBuilder;
-PDFJS.DefaultAnnotationLayerFactory = _annotation_layer_builder.DefaultAnnotationLayerFactory;
-PDFJS.PDFHistory = _pdf_history.PDFHistory;
-PDFJS.PDFFindController = _pdf_find_controller.PDFFindController;
-PDFJS.EventBus = _ui_utils.EventBus;
-PDFJS.DownloadManager = _download_manager.DownloadManager;
-PDFJS.ProgressBar = _ui_utils.ProgressBar;
-PDFJS.GenericL10n = _genericl10n.GenericL10n;
-PDFJS.NullL10n = _ui_utils.NullL10n;
-exports.PDFJS = PDFJS;
+var pdfjsVersion = '2.0.419';
+var pdfjsBuild = 'c33bf800';
+exports.PDFViewer = _pdf_viewer.PDFViewer;
+exports.PDFSinglePageViewer = _pdf_single_page_viewer.PDFSinglePageViewer;
+exports.PDFPageView = _pdf_page_view.PDFPageView;
+exports.PDFLinkService = _pdf_link_service.PDFLinkService;
+exports.SimpleLinkService = _pdf_link_service.SimpleLinkService;
+exports.TextLayerBuilder = _text_layer_builder.TextLayerBuilder;
+exports.DefaultTextLayerFactory = _text_layer_builder.DefaultTextLayerFactory;
+exports.AnnotationLayerBuilder = _annotation_layer_builder.AnnotationLayerBuilder;
+exports.DefaultAnnotationLayerFactory = _annotation_layer_builder.DefaultAnnotationLayerFactory;
+exports.PDFHistory = _pdf_history.PDFHistory;
+exports.PDFFindController = _pdf_find_controller.PDFFindController;
+exports.EventBus = _ui_utils.EventBus;
+exports.DownloadManager = _download_manager.DownloadManager;
+exports.ProgressBar = _ui_utils.ProgressBar;
+exports.GenericL10n = _genericl10n.GenericL10n;
+exports.NullL10n = _ui_utils.NullL10n;
 
 /***/ }),
 /* 10 */
@@ -3226,11 +3213,12 @@ exports.DownloadManager = undefined;
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
-var _pdfjsLib = __w_pdfjs_require__(0);
+var _pdfjsLib = __w_pdfjs_require__(1);
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
 ;
+var DISABLE_CREATE_OBJECT_URL = _pdfjsLib.apiCompatibilityParams.disableCreateObjectURL || false;
 function _download(blobUrl, filename) {
   var a = document.createElement('a');
   if (!a.click) {
@@ -3247,8 +3235,13 @@ function _download(blobUrl, filename) {
 }
 
 var DownloadManager = function () {
-  function DownloadManager() {
+  function DownloadManager(_ref) {
+    var _ref$disableCreateObj = _ref.disableCreateObjectURL,
+        disableCreateObjectURL = _ref$disableCreateObj === undefined ? DISABLE_CREATE_OBJECT_URL : _ref$disableCreateObj;
+
     _classCallCheck(this, DownloadManager);
+
+    this.disableCreateObjectURL = disableCreateObjectURL;
   }
 
   _createClass(DownloadManager, [{
@@ -3265,7 +3258,7 @@ var DownloadManager = function () {
       if (navigator.msSaveBlob) {
         return navigator.msSaveBlob(new Blob([data], { type: contentType }), filename);
       }
-      var blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, _pdfjsLib.PDFJS.disableCreateObjectURL);
+      var blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, this.disableCreateObjectURL);
       _download(blobUrl, filename);
     }
   }, {
@@ -3277,7 +3270,7 @@ var DownloadManager = function () {
         }
         return;
       }
-      if (_pdfjsLib.PDFJS.disableCreateObjectURL) {
+      if (this.disableCreateObjectURL) {
         this.downloadUrl(url, filename);
         return;
       }
@@ -4099,9 +4092,9 @@ exports.PDFFindController = exports.FindState = undefined;
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
-var _pdfjsLib = __w_pdfjs_require__(0);
+var _pdfjsLib = __w_pdfjs_require__(1);
 
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
@@ -4528,7 +4521,7 @@ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
 var _dom_events = __w_pdfjs_require__(2);
 
@@ -5020,9 +5013,9 @@ var _get = function get(object, property, receiver) { if (object === null) objec
 
 var _base_viewer = __w_pdfjs_require__(8);
 
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
-var _pdfjsLib = __w_pdfjs_require__(0);
+var _pdfjsLib = __w_pdfjs_require__(1);
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 
@@ -5179,11 +5172,11 @@ exports.PDFViewer = undefined;
 
 var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
 
-var _ui_utils = __w_pdfjs_require__(1);
+var _ui_utils = __w_pdfjs_require__(0);
 
 var _base_viewer = __w_pdfjs_require__(8);
 
-var _pdfjsLib = __w_pdfjs_require__(0);
+var _pdfjsLib = __w_pdfjs_require__(1);
 
 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
 

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
web/pdf_viewer.js.map


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно