Ignore PDF documents opened from "data:"-URLs when handling internal links (bug 1803050)

This patch has been successfully tested in a local, artifact, Firefox build.

*Please note:* The only thing that'll no longer work for PDF documents opened using "data:"-URLs is middle-clicking on internal/outline links, in order to open the destination in a new tab. This is however an extremely small loss of functionality, and as can be seen in the bug the alternative (i.e. doing nothing) is surely much worse.
This commit is contained in:
Jonas Jenwald 2022-11-29 13:51:40 +01:00
parent 5d79cc5bee
commit 0d648f531b
3 changed files with 23 additions and 3 deletions

View File

@ -52,6 +52,7 @@ import {
getFilenameFromUrl,
getPdfFilenameFromUrl,
getXfaPageViewport,
isDataScheme,
isPdfFile,
isValidFetchUrl,
loadScript,
@ -125,6 +126,7 @@ export {
getXfaPageViewport,
GlobalWorkerOptions,
InvalidPDFException,
isDataScheme,
isPdfFile,
loadScript,
MissingPDFException,

View File

@ -42,6 +42,7 @@ import {
getPdfFilenameFromUrl,
GlobalWorkerOptions,
InvalidPDFException,
isDataScheme,
isPdfFile,
loadScript,
MissingPDFException,
@ -731,6 +732,9 @@ const PDFViewerApplication = {
this._downloadUrl =
downloadUrl === url ? this.baseUrl : downloadUrl.split("#")[0];
}
if (isDataScheme(url)) {
this._hideViewBookmark();
}
let title = getPdfFilenameFromUrl(url, "");
if (!title) {
try {
@ -766,8 +770,17 @@ const PDFViewerApplication = {
* @private
*/
_hideViewBookmark() {
const { viewBookmarkButton, presentationModeButton } =
this.appConfig.secondaryToolbar;
// URL does not reflect proper document location - hiding some buttons.
this.appConfig.secondaryToolbar.viewBookmarkButton.hidden = true;
viewBookmarkButton.hidden = true;
// Avoid displaying multiple consecutive separators in the secondaryToolbar.
if (presentationModeButton.hidden) {
const element = document.getElementById("viewBookmarkSeparator");
element.hidden = true;
}
},
/**
@ -1124,6 +1137,11 @@ const PDFViewerApplication = {
} else if (PDFJSDev.test("CHROME")) {
baseDocumentUrl = location.href.split("#")[0];
}
if (baseDocumentUrl && isDataScheme(baseDocumentUrl)) {
// Ignore "data:"-URLs for performance reasons, even though it may cause
// internal links to not work perfectly in all cases (see bug 1803050).
baseDocumentUrl = null;
}
this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
this.pdfDocumentProperties.setDocument(pdfDocument);
@ -2137,7 +2155,7 @@ function webViewerInitialized() {
}
if (!PDFViewerApplication.supportsFullscreen) {
appConfig.secondaryToolbar.presentationModeButton.classList.add("hidden");
appConfig.secondaryToolbar.presentationModeButton.hidden = true;
}
if (PDFViewerApplication.supportsIntegratedFind) {

View File

@ -208,7 +208,7 @@ See https://github.com/adobe-type-tools/cmap-resources
<span data-l10n-id="bookmark_label">Current View</span>
</a>
<div class="horizontalToolbarSeparator"></div>
<div id="viewBookmarkSeparator" class="horizontalToolbarSeparator"></div>
<button id="firstPage" class="secondaryToolbarButton" title="Go to First Page" tabindex="56" data-l10n-id="first_page">
<span data-l10n-id="first_page_label">Go to First Page</span>