Merge pull request #9363 from Rob--W/fetch-http/s-only

Limit PDFFetchStream to http(s) in the Chrome extension
This commit is contained in:
Jonas Jenwald 2018-01-21 11:45:09 +01:00 committed by GitHub
commit fe5102a27f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 17 deletions

View File

@ -83,15 +83,25 @@ if (typeof PDFJSDev !== 'undefined' &&
}) : null; }) : null;
} }
/** @type IPDFStream */ /**
var PDFNetworkStream; * @typedef {function} IPDFStreamFactory
* @param {DocumentInitParameters} params The document initialization
* parameters. The "url" key is always present.
* @return {IPDFStream}
*/
/** @type IPDFStreamFactory */
var createPDFNetworkStream;
/** /**
* Sets PDFNetworkStream class to be used as alternative PDF data transport. * Sets the function that instantiates a IPDFStream as an alternative PDF data
* @param {IPDFStream} cls - the PDF data transport. * transport.
* @param {IPDFStreamFactory} pdfNetworkStreamFactory - the factory function
* that takes document initialization parameters (including a "url") and returns
* an instance of IPDFStream.
*/ */
function setPDFNetworkStreamClass(cls) { function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
PDFNetworkStream = cls; createPDFNetworkStream = pdfNetworkStreamFactory;
} }
/** /**
@ -252,7 +262,7 @@ function getDocument(src) {
if (rangeTransport) { if (rangeTransport) {
networkStream = new PDFDataTransportStream(params, rangeTransport); networkStream = new PDFDataTransportStream(params, rangeTransport);
} else if (!params.data) { } else if (!params.data) {
networkStream = new PDFNetworkStream(params); networkStream = createPDFNetworkStream(params);
} }
var messageHandler = new MessageHandler(docId, workerId, worker.port); var messageHandler = new MessageHandler(docId, workerId, worker.port);
@ -2346,7 +2356,7 @@ export {
PDFWorker, PDFWorker,
PDFDocumentProxy, PDFDocumentProxy,
PDFPageProxy, PDFPageProxy,
setPDFNetworkStreamClass, setPDFNetworkStreamFactory,
version, version,
build, build,
}; };

View File

@ -30,19 +30,39 @@ var pdfjsDisplayDOMUtils = require('./display/dom_utils.js');
var pdfjsDisplaySVG = require('./display/svg.js'); var pdfjsDisplaySVG = require('./display/svg.js');
if (typeof PDFJSDev === 'undefined' || if (typeof PDFJSDev === 'undefined' ||
!PDFJSDev.test('FIREFOX || MOZCENTRAL')) { !PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {
const isNodeJS = require('./shared/is_node.js'); const isNodeJS = require('./shared/is_node.js');
if (isNodeJS()) { if (isNodeJS()) {
var PDFNodeStream = require('./display/node_stream.js').PDFNodeStream; let PDFNodeStream = require('./display/node_stream.js').PDFNodeStream;
pdfjsDisplayAPI.setPDFNetworkStreamClass(PDFNodeStream); pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => {
return new PDFNodeStream(params);
});
} else if (typeof Response !== 'undefined' && 'body' in Response.prototype && } else if (typeof Response !== 'undefined' && 'body' in Response.prototype &&
typeof ReadableStream !== 'undefined') { typeof ReadableStream !== 'undefined') {
var PDFFetchStream = require('./display/fetch_stream.js').PDFFetchStream; let PDFFetchStream = require('./display/fetch_stream.js').PDFFetchStream;
pdfjsDisplayAPI.setPDFNetworkStreamClass(PDFFetchStream); pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => {
return new PDFFetchStream(params);
});
} else { } else {
var PDFNetworkStream = require('./display/network.js').PDFNetworkStream; let PDFNetworkStream = require('./display/network.js').PDFNetworkStream;
pdfjsDisplayAPI.setPDFNetworkStreamClass(PDFNetworkStream); pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => {
return new PDFNetworkStream(params);
});
} }
} else if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME')) {
let PDFNetworkStream = require('./display/network.js').PDFNetworkStream;
let PDFFetchStream;
if (typeof Response !== 'undefined' && 'body' in Response.prototype &&
typeof ReadableStream !== 'undefined') {
PDFFetchStream = require('./display/fetch_stream.js').PDFFetchStream;
}
pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => {
if (PDFFetchStream && /^https?:/i.test(params.url)) {
// "fetch" is only supported for http(s), not file/ftp.
return new PDFFetchStream(params);
}
return new PDFNetworkStream(params);
});
} }
exports.PDFJS = pdfjsDisplayGlobal.PDFJS; exports.PDFJS = pdfjsDisplayGlobal.PDFJS;

View File

@ -85,9 +85,13 @@ function initializePDFJS(callback) {
// Set network stream class for unit tests. // Set network stream class for unit tests.
if (typeof Response !== 'undefined' && 'body' in Response.prototype && if (typeof Response !== 'undefined' && 'body' in Response.prototype &&
typeof ReadableStream !== 'undefined') { typeof ReadableStream !== 'undefined') {
displayApi.setPDFNetworkStreamClass(PDFFetchStream); displayApi.setPDFNetworkStreamFactory(function(params) {
return new PDFFetchStream(params);
});
} else { } else {
displayApi.setPDFNetworkStreamClass(PDFNetworkStream); displayApi.setPDFNetworkStreamFactory(function(params) {
return new PDFNetworkStream(params);
});
} }
// Configure the worker. // Configure the worker.