| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | 
							- /* Copyright 2013 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.
 
-  */
 
- /** @typedef {import("./interfaces").IDownloadManager} IDownloadManager */
 
- import { createValidAbsoluteUrl, isPdfFile } from "pdfjs-lib";
 
- if (typeof PDFJSDev !== "undefined" && !PDFJSDev.test("CHROME || GENERIC")) {
 
-   throw new Error(
 
-     'Module "pdfjs-web/download_manager" shall not be used ' +
 
-       "outside CHROME and GENERIC builds."
 
-   );
 
- }
 
- function download(blobUrl, filename) {
 
-   const a = document.createElement("a");
 
-   if (!a.click) {
 
-     throw new Error('DownloadManager: "a.click()" is not supported.');
 
-   }
 
-   a.href = blobUrl;
 
-   a.target = "_parent";
 
-   // Use a.download if available. This increases the likelihood that
 
-   // the file is downloaded instead of opened by another PDF plugin.
 
-   if ("download" in a) {
 
-     a.download = filename;
 
-   }
 
-   // <a> must be in the document for recent Firefox versions,
 
-   // otherwise .click() is ignored.
 
-   (document.body || document.documentElement).append(a);
 
-   a.click();
 
-   a.remove();
 
- }
 
- /**
 
-  * @implements {IDownloadManager}
 
-  */
 
- class DownloadManager {
 
-   #openBlobUrls = new WeakMap();
 
-   downloadUrl(url, filename) {
 
-     if (!createValidAbsoluteUrl(url, "http://example.com")) {
 
-       console.error(`downloadUrl - not a valid URL: ${url}`);
 
-       return; // restricted/invalid URL
 
-     }
 
-     download(url + "#pdfjs.action=download", filename);
 
-   }
 
-   downloadData(data, filename, contentType) {
 
-     const blobUrl = URL.createObjectURL(
 
-       new Blob([data], { type: contentType })
 
-     );
 
-     download(blobUrl, filename);
 
-   }
 
-   /**
 
-    * @returns {boolean} Indicating if the data was opened.
 
-    */
 
-   openOrDownloadData(element, data, filename) {
 
-     const isPdfData = isPdfFile(filename);
 
-     const contentType = isPdfData ? "application/pdf" : "";
 
-     if (isPdfData) {
 
-       let blobUrl = this.#openBlobUrls.get(element);
 
-       if (!blobUrl) {
 
-         blobUrl = URL.createObjectURL(new Blob([data], { type: contentType }));
 
-         this.#openBlobUrls.set(element, blobUrl);
 
-       }
 
-       let viewerUrl;
 
-       if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
 
-         // The current URL is the viewer, let's use it and append the file.
 
-         viewerUrl = "?file=" + encodeURIComponent(blobUrl + "#" + filename);
 
-       } else if (PDFJSDev.test("CHROME")) {
 
-         // In the Chrome extension, the URL is rewritten using the history API
 
-         // in viewer.js, so an absolute URL must be generated.
 
-         viewerUrl =
 
-           // eslint-disable-next-line no-undef
 
-           chrome.runtime.getURL("/content/web/viewer.html") +
 
-           "?file=" +
 
-           encodeURIComponent(blobUrl + "#" + filename);
 
-       }
 
-       try {
 
-         window.open(viewerUrl);
 
-         return true;
 
-       } catch (ex) {
 
-         console.error(`openOrDownloadData: ${ex}`);
 
-         // Release the `blobUrl`, since opening it failed, and fallback to
 
-         // downloading the PDF file.
 
-         URL.revokeObjectURL(blobUrl);
 
-         this.#openBlobUrls.delete(element);
 
-       }
 
-     }
 
-     this.downloadData(data, filename, contentType);
 
-     return false;
 
-   }
 
-   download(blob, url, filename) {
 
-     const blobUrl = URL.createObjectURL(blob);
 
-     download(blobUrl, filename);
 
-   }
 
- }
 
- export { DownloadManager };
 
 
  |