Merge pull request #8845 from yurydelendik/fix-autofetch

Fixes autofetch and firefox nightly fetch streams
This commit is contained in:
Yury Delendik 2017-08-30 11:28:42 -05:00 committed by GitHub
commit 2656825432
4 changed files with 25 additions and 7 deletions

View File

@ -13,7 +13,9 @@
* limitations under the License.
*/
import { assert, createPromiseCapability } from '../shared/util';
import {
AbortException, assert, createPromiseCapability
} from '../shared/util';
import {
createResponseStatusError, validateRangeRequestCapabilities,
validateResponseStatus
@ -95,8 +97,8 @@ class PDFFetchStreamReader {
if (!validateResponseStatus(response.status, this._stream.isHttp)) {
throw createResponseStatusError(response.status, url);
}
this._headersCapability.resolve();
this._reader = response.body.getReader();
this._headersCapability.resolve();
let { allowRangeRequests, suggestedLength, } =
validateRangeRequestCapabilities({
@ -110,6 +112,12 @@ class PDFFetchStreamReader {
this._contentLength = suggestedLength;
this._isRangeSupported = allowRangeRequests;
// We need to stop reading when range is supported and streaming is
// disabled.
if (!this._isStreamingSupported && this._isRangeSupported) {
this.cancel(new AbortException('streaming is disabled'));
}
}).catch(this._headersCapability.reject);
this.onProgress = null;

View File

@ -19,7 +19,9 @@ let http = __non_webpack_require__('http');
let https = __non_webpack_require__('https');
let url = __non_webpack_require__('url');
import { assert, createPromiseCapability } from '../shared/util';
import {
AbortException, assert, createPromiseCapability
} from '../shared/util';
import { validateRangeRequestCapabilities } from './network_utils';
class PDFNodeStream {
@ -165,6 +167,12 @@ class BaseFullReader {
this._error(reason);
});
// We need to stop reading when range is supported and streaming is
// disabled.
if (!this._isStreamingSupported && this._isRangeSupported) {
this._error(new AbortException('streaming is disabled'));
}
// Destroy ReadableStream if already in errored state.
if (this._errored) {
this._readableStream.destroy(this._reason);
@ -353,8 +361,6 @@ class PDFNodeStreamFsFullReader extends BaseFullReader {
constructor(stream) {
super(stream);
this._setReadableStream(fs.createReadStream(this._url.path));
fs.lstat(this._url.path, (error, stat) => {
if (error) {
this._errored = true;
@ -364,6 +370,8 @@ class PDFNodeStreamFsFullReader extends BaseFullReader {
}
// Setting right content length.
this._contentLength = stat.size;
this._setReadableStream(fs.createReadStream(this._url.path));
this._headersCapability.resolve();
});
}

View File

@ -34,7 +34,8 @@ if (typeof PDFJSDev === 'undefined' ||
if (pdfjsSharedUtil.isNodeJS()) {
var PDFNodeStream = require('./display/node_stream.js').PDFNodeStream;
pdfjsDisplayAPI.setPDFNetworkStreamClass(PDFNodeStream);
} else if (typeof Response !== 'undefined' && 'body' in Response.prototype) {
} else if (typeof Response !== 'undefined' && 'body' in Response.prototype &&
typeof ReadableStream !== 'undefined') {
var PDFFetchStream = require('./display/fetch_stream.js').PDFFetchStream;
pdfjsDisplayAPI.setPDFNetworkStreamClass(PDFFetchStream);
} else {

View File

@ -80,7 +80,8 @@ function initializePDFJS(callback) {
var PDFFetchStream = modules[3].PDFFetchStream;
// 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') {
displayApi.setPDFNetworkStreamClass(PDFFetchStream);
} else {
displayApi.setPDFNetworkStreamClass(PDFNetworkStream);