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;
}
/** @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.
* @param {IPDFStream} cls - the PDF data transport.
* Sets the function that instantiates a IPDFStream as an alternative PDF data
* transport.
* @param {IPDFStreamFactory} pdfNetworkStreamFactory - the factory function
* that takes document initialization parameters (including a "url") and returns
* an instance of IPDFStream.
*/
function setPDFNetworkStreamClass(cls) {
PDFNetworkStream = cls;
function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
createPDFNetworkStream = pdfNetworkStreamFactory;
}
/**
@ -252,7 +262,7 @@ function getDocument(src) {
if (rangeTransport) {
networkStream = new PDFDataTransportStream(params, rangeTransport);
} else if (!params.data) {
networkStream = new PDFNetworkStream(params);
networkStream = createPDFNetworkStream(params);
}
var messageHandler = new MessageHandler(docId, workerId, worker.port);
@ -2346,7 +2356,7 @@ export {
PDFWorker,
PDFDocumentProxy,
PDFPageProxy,
setPDFNetworkStreamClass,
setPDFNetworkStreamFactory,
version,
build,
};

View File

@ -30,19 +30,39 @@ var pdfjsDisplayDOMUtils = require('./display/dom_utils.js');
var pdfjsDisplaySVG = require('./display/svg.js');
if (typeof PDFJSDev === 'undefined' ||
!PDFJSDev.test('FIREFOX || MOZCENTRAL')) {
!PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {
const isNodeJS = require('./shared/is_node.js');
if (isNodeJS()) {
var PDFNodeStream = require('./display/node_stream.js').PDFNodeStream;
pdfjsDisplayAPI.setPDFNetworkStreamClass(PDFNodeStream);
let PDFNodeStream = require('./display/node_stream.js').PDFNodeStream;
pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => {
return new PDFNodeStream(params);
});
} else if (typeof Response !== 'undefined' && 'body' in Response.prototype &&
typeof ReadableStream !== 'undefined') {
var PDFFetchStream = require('./display/fetch_stream.js').PDFFetchStream;
pdfjsDisplayAPI.setPDFNetworkStreamClass(PDFFetchStream);
let PDFFetchStream = require('./display/fetch_stream.js').PDFFetchStream;
pdfjsDisplayAPI.setPDFNetworkStreamFactory((params) => {
return new PDFFetchStream(params);
});
} else {
var PDFNetworkStream = require('./display/network.js').PDFNetworkStream;
pdfjsDisplayAPI.setPDFNetworkStreamClass(PDFNetworkStream);
let PDFNetworkStream = require('./display/network.js').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;

View File

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