Bug 1568071 - Add a way to disable external links in PDFS. r=yury, a=RyanVM
Differential Revision:
https://phabricator.services.mozilla.com/D43140
--- a/browser/extensions/pdfjs/README.mozilla
+++ b/browser/extensions/pdfjs/README.mozilla
@@ -1,5 +1,5 @@
This is the PDF.js project output, https://github.com/mozilla/pdf.js
-Current extension version is: 2.2.177
+Current extension version is: 2.2.178
-Taken from upstream commit: 1421b2f2
+Taken from upstream commit: 3e869a28
--- a/browser/extensions/pdfjs/content/build/pdf.js
+++ b/browser/extensions/pdfjs/content/build/pdf.js
@@ -118,18 +118,18 @@ return /******/ (function(modules) { //
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __w_pdfjs_require__) {
"use strict";
-var pdfjsVersion = '2.2.177';
-var pdfjsBuild = '1421b2f2';
+var pdfjsVersion = '2.2.178';
+var pdfjsBuild = '3e869a28';
var pdfjsSharedUtil = __w_pdfjs_require__(1);
var pdfjsDisplayAPI = __w_pdfjs_require__(6);
var pdfjsDisplayTextLayer = __w_pdfjs_require__(18);
var pdfjsDisplayAnnotationLayer = __w_pdfjs_require__(19);
@@ -1299,17 +1299,17 @@ function _fetchDocument(worker, source,
if (pdfDataRangeTransport) {
source.length = pdfDataRangeTransport.length;
source.initialData = pdfDataRangeTransport.initialData;
source.progressiveDone = pdfDataRangeTransport.progressiveDone;
}
return worker.messageHandler.sendWithPromise('GetDocRequest', {
docId,
- apiVersion: '2.2.177',
+ apiVersion: '2.2.178',
source: {
data: source.data,
url: source.url,
password: source.password,
disableAutoFetch: source.disableAutoFetch,
rangeChunkSize: source.rangeChunkSize,
length: source.length
},
@@ -3095,19 +3095,19 @@ const InternalRenderTask = function Inte
}
}
}
return InternalRenderTask;
}();
-const version = '2.2.177';
+const version = '2.2.178';
exports.version = version;
-const build = '1421b2f2';
+const build = '3e869a28';
exports.build = build;
/***/ }),
/* 7 */
/***/ (function(module, exports, __w_pdfjs_require__) {
"use strict";
@@ -3374,19 +3374,31 @@ const LinkTarget = {
TOP: 4
};
exports.LinkTarget = LinkTarget;
const LinkTargetStringMap = ['', '_self', '_blank', '_parent', '_top'];
function addLinkAttributes(link, {
url,
target,
- rel
+ rel,
+ enabled = true
} = {}) {
- link.href = link.title = url ? (0, _util.removeNullCharacters)(url) : '';
+ const urlNullRemoved = url ? (0, _util.removeNullCharacters)(url) : '';
+
+ if (enabled) {
+ link.href = link.title = urlNullRemoved;
+ } else {
+ link.href = '';
+ link.title = `Disabled: ${urlNullRemoved}`;
+
+ link.onclick = () => {
+ return false;
+ };
+ }
if (url) {
const LinkTargetValues = Object.values(LinkTarget);
const targetIndex = LinkTargetValues.includes(target) ? target : LinkTarget.NONE;
link.target = LinkTargetStringMap[targetIndex];
link.rel = typeof rel === 'string' ? rel : DEFAULT_LINK_REL;
}
}
@@ -9082,17 +9094,18 @@ class LinkAnnotationElement extends Anno
let {
data,
linkService
} = this;
let link = document.createElement('a');
(0, _display_utils.addLinkAttributes)(link, {
url: data.url,
target: data.newWindow ? _display_utils.LinkTarget.BLANK : linkService.externalLinkTarget,
- rel: linkService.externalLinkRel
+ rel: linkService.externalLinkRel,
+ enabled: linkService.externalLinkEnabled
});
if (!data.url) {
if (data.action) {
this._bindNamedAction(link, data.action);
} else {
this._bindLink(link, data.dest);
}
--- a/browser/extensions/pdfjs/content/build/pdf.worker.js
+++ b/browser/extensions/pdfjs/content/build/pdf.worker.js
@@ -118,18 +118,18 @@ return /******/ (function(modules) { //
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __w_pdfjs_require__) {
"use strict";
-const pdfjsVersion = '2.2.177';
-const pdfjsBuild = '1421b2f2';
+const pdfjsVersion = '2.2.178';
+const pdfjsBuild = '3e869a28';
const pdfjsCoreWorker = __w_pdfjs_require__(1);
exports.WorkerMessageHandler = pdfjsCoreWorker.WorkerMessageHandler;
/***/ }),
/* 1 */
/***/ (function(module, exports, __w_pdfjs_require__) {
@@ -373,17 +373,17 @@ var WorkerMessageHandler = {
createDocumentHandler(docParams, port) {
var pdfManager;
var terminated = false;
var cancelXHRs = null;
var WorkerTasks = [];
const verbosity = (0, _util.getVerbosityLevel)();
let apiVersion = docParams.apiVersion;
- let workerVersion = '2.2.177';
+ let workerVersion = '2.2.178';
if (apiVersion !== workerVersion) {
throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`);
}
var docId = docParams.docId;
var docBaseUrl = docParams.docBaseUrl;
var workerHandlerName = docParams.docId + '_worker';
--- a/browser/extensions/pdfjs/content/web/viewer.js
+++ b/browser/extensions/pdfjs/content/web/viewer.js
@@ -854,16 +854,17 @@ let PDFViewerApplication = {
parameters[prop] = args[prop];
}
}
let loadingTask = (0, _pdfjsLib.getDocument)(parameters);
this.pdfLoadingTask = loadingTask;
loadingTask.onPassword = (updateCallback, reason) => {
+ this.pdfLinkService.externalLinkEnabled = false;
this.passwordPrompt.setUpdateCallback(updateCallback, reason);
this.passwordPrompt.open();
};
loadingTask.onProgress = ({
loaded,
total
}) => {
@@ -6383,21 +6384,23 @@ Object.defineProperty(exports, "__esModu
exports.SimpleLinkService = exports.PDFLinkService = void 0;
var _ui_utils = __webpack_require__(2);
class PDFLinkService {
constructor({
eventBus,
externalLinkTarget = null,
- externalLinkRel = null
+ externalLinkRel = null,
+ externalLinkEnabled = true
} = {}) {
this.eventBus = eventBus || (0, _ui_utils.getGlobalEventBus)();
this.externalLinkTarget = externalLinkTarget;
this.externalLinkRel = externalLinkRel;
+ this.externalLinkEnabled = externalLinkEnabled;
this.baseUrl = null;
this.pdfDocument = null;
this.pdfViewer = null;
this.pdfHistory = null;
this._pagesRefCache = null;
}
setDocument(pdfDocument, baseUrl = null) {
@@ -6755,16 +6758,17 @@ function isValidExplicitDestination(dest
return true;
}
class SimpleLinkService {
constructor() {
this.externalLinkTarget = null;
this.externalLinkRel = null;
+ this.externalLinkEnabled = true;
}
get pagesCount() {
return 0;
}
get page() {
return 0;
@@ -6853,17 +6857,18 @@ class PDFOutlineViewer {
let {
linkService
} = this;
if (url) {
(0, _pdfjsLib.addLinkAttributes)(element, {
url,
target: newWindow ? _pdfjsLib.LinkTarget.BLANK : linkService.externalLinkTarget,
- rel: linkService.externalLinkRel
+ rel: linkService.externalLinkRel,
+ enabled: linkService.externalLinkEnabled
});
return;
}
element.href = linkService.getDestinationHash(dest);
element.onclick = () => {
if (dest) {