Merge pull request #12293 from Snuffleupagus/bug-1661259

Download, rather than opening, PDF attachments in Firefox (bug 1661259, PR 12286 follow-up)
This commit is contained in:
Tim van der Meij 2020-08-27 22:13:19 +02:00 committed by GitHub
commit 6db8907d82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,6 +17,8 @@ import { createPromiseCapability, getFilenameFromUrl } from "pdfjs-lib";
import { BaseTreeViewer } from "./base_tree_viewer.js";
import { viewerCompatibilityParams } from "./viewer_compatibility.js";
const PdfFileRegExp = /\.pdf$/i;
/**
* @typedef {Object} PDFAttachmentViewerOptions
* @property {HTMLDivElement} container - The viewer element.
@ -118,22 +120,7 @@ class PDFAttachmentViewer extends BaseTreeViewer {
encodeURIComponent(blobUrl + "#" + filename);
}
try {
if (typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) {
window.open(viewerUrl);
} else {
// Since we have a full URL in the MOZCENTRAL-build, use a link rather
// than `window.open` since e.g. ad blockers may otherwise force-close
// the newly opened window and thus break viewing of PDF attachments
// (fixes bug 1661259).
const a = document.createElement("a");
a.hidden = true;
a.href = viewerUrl;
a.target = "_blank";
// <a> must be in the document, otherwise `a.click()` is ignored.
(document.body || document.documentElement).appendChild(a);
a.click();
a.remove();
}
window.open(viewerUrl);
} catch (ex) {
console.error(`_bindPdfLink: ${ex}`);
// Release the `blobUrl`, since opening it failed...
@ -151,7 +138,8 @@ class PDFAttachmentViewer extends BaseTreeViewer {
*/
_bindLink(element, { content, filename }) {
element.onclick = () => {
this.downloadManager.downloadData(content, filename, "");
const contentType = PdfFileRegExp.test(filename) ? "application/pdf" : "";
this.downloadManager.downloadData(content, filename, contentType);
return false;
};
}
@ -184,7 +172,8 @@ class PDFAttachmentViewer extends BaseTreeViewer {
const element = document.createElement("a");
if (
/\.pdf$/i.test(filename) &&
(typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) &&
PdfFileRegExp.test(filename) &&
!viewerCompatibilityParams.disableCreateObjectURL
) {
this._bindPdfLink(element, { content: item.content, filename });