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:
commit
fe5102a27f
@ -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,
|
||||||
};
|
};
|
||||||
|
34
src/pdf.js
34
src/pdf.js
@ -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;
|
||||||
|
@ -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.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user