52e0f51917
Please see http://eslint.org/docs/rules/no-unused-vars; note that this patch purposely uses the same rule options as in `mozilla-central`, such that it fixes part of issue 7957. It wasn't, in my opinion, entirely straightforward to enable this rule compared to the already existing rules. In many cases a `var descriptiveName = ...` format was used (more or less) to document the code, and I choose to place the old variable name in a trailing comment to not lose that information. I welcome feedback on these changes, since it wasn't always entirely easy to know what changes made the most sense in every situation.
193 lines
5.9 KiB
JavaScript
193 lines
5.9 KiB
JavaScript
/* Copyright 2017 Mozilla Foundation
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
'use strict';
|
|
|
|
(function (root, factory) {
|
|
if (typeof define === 'function' && define.amd) {
|
|
define('pdfjs-test/unit/network_spec', ['exports', 'pdfjs/core/network'],
|
|
factory);
|
|
} else if (typeof exports !== 'undefined') {
|
|
factory(exports, require('../../src/core/network.js'));
|
|
} else {
|
|
factory((root.pdfjsTestUnitNetworkSpec = {}), root.pdfjsCoreNetwork);
|
|
}
|
|
}(this, function (exports, coreNetwork) {
|
|
|
|
var PDFNetworkStream = coreNetwork.PDFNetworkStream;
|
|
|
|
describe('network', function() {
|
|
var pdf1 = new URL('../pdfs/tracemonkey.pdf', window.location).href;
|
|
var pdf1Length = 1016315;
|
|
var pdf2 = new URL('../pdfs/pdf.pdf', window.location).href;
|
|
var pdf2Length = 32472771;
|
|
|
|
it('read without stream and range', function(done) {
|
|
var stream = new PDFNetworkStream({
|
|
source: {
|
|
url: pdf1,
|
|
rangeChunkSize: 65536,
|
|
disableStream: true,
|
|
},
|
|
disableRange: true
|
|
});
|
|
|
|
var fullReader = stream.getFullReader();
|
|
|
|
var isStreamingSupported, isRangeSupported;
|
|
var promise = fullReader.headersReady.then(function () {
|
|
isStreamingSupported = fullReader.isStreamingSupported;
|
|
isRangeSupported = fullReader.isRangeSupported;
|
|
});
|
|
|
|
var len = 0, count = 0;
|
|
var read = function () {
|
|
return fullReader.read().then(function (result) {
|
|
if (result.done) {
|
|
return;
|
|
}
|
|
count++;
|
|
len += result.value.byteLength;
|
|
return read();
|
|
});
|
|
};
|
|
|
|
var readPromise = Promise.all([read(), promise]);
|
|
|
|
readPromise.then(function (page) {
|
|
expect(len).toEqual(pdf1Length);
|
|
expect(count).toEqual(1);
|
|
expect(isStreamingSupported).toEqual(false);
|
|
expect(isRangeSupported).toEqual(false);
|
|
done();
|
|
}).catch(function (reason) {
|
|
done.fail(reason);
|
|
});
|
|
});
|
|
|
|
it('read with streaming', function(done) {
|
|
var userAgent = window.navigator.userAgent;
|
|
// The test is valid for FF only: the XHR has support of the
|
|
// 'moz-chunked-array' response type.
|
|
// TODO enable for other browsers, e.g. when fetch/streams API is supported.
|
|
var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent);
|
|
if (!m || m[1] < 9) {
|
|
expect(true).toEqual(true);
|
|
done();
|
|
return;
|
|
}
|
|
|
|
var stream = new PDFNetworkStream({
|
|
source: {
|
|
url: pdf2,
|
|
rangeChunkSize: 65536,
|
|
disableStream: false,
|
|
},
|
|
disableRange: false
|
|
});
|
|
|
|
var fullReader = stream.getFullReader();
|
|
|
|
var isStreamingSupported, isRangeSupported;
|
|
var promise = fullReader.headersReady.then(function () {
|
|
isStreamingSupported = fullReader.isStreamingSupported;
|
|
isRangeSupported = fullReader.isRangeSupported;
|
|
});
|
|
|
|
var len = 0, count = 0;
|
|
var read = function () {
|
|
return fullReader.read().then(function (result) {
|
|
if (result.done) {
|
|
return;
|
|
}
|
|
count++;
|
|
len += result.value.byteLength;
|
|
return read();
|
|
});
|
|
};
|
|
|
|
var readPromise = Promise.all([read(), promise]);
|
|
|
|
readPromise.then(function () {
|
|
expect(len).toEqual(pdf2Length);
|
|
expect(count).toBeGreaterThan(1);
|
|
expect(isStreamingSupported).toEqual(true);
|
|
expect(isRangeSupported).toEqual(true);
|
|
done();
|
|
}).catch(function (reason) {
|
|
done.fail(reason);
|
|
});
|
|
});
|
|
|
|
it('read custom ranges', function (done) {
|
|
// We don't test on browsers that don't support range request, so
|
|
// requiring this test to pass.
|
|
var rangeSize = 32768;
|
|
var stream = new PDFNetworkStream({
|
|
source: {
|
|
url: pdf1,
|
|
length: pdf1Length,
|
|
rangeChunkSize: rangeSize,
|
|
disableStream: true,
|
|
},
|
|
disableRange: false
|
|
});
|
|
|
|
var fullReader = stream.getFullReader();
|
|
|
|
var isStreamingSupported, isRangeSupported, fullReaderCancelled;
|
|
var promise = fullReader.headersReady.then(function () {
|
|
isStreamingSupported = fullReader.isStreamingSupported;
|
|
isRangeSupported = fullReader.isRangeSupported;
|
|
// we shall be able to close the full reader without issues
|
|
fullReader.cancel('Don\'t need full reader');
|
|
fullReaderCancelled = true;
|
|
});
|
|
|
|
// Skipping fullReader results, requesting something from the PDF end.
|
|
var tailSize = (pdf1Length % rangeSize) || rangeSize;
|
|
|
|
var range1Reader = stream.getRangeReader(pdf1Length - tailSize - rangeSize,
|
|
pdf1Length - tailSize);
|
|
var range2Reader = stream.getRangeReader(pdf1Length - tailSize, pdf1Length);
|
|
|
|
var result1 = {value: 0}, result2 = {value: 0};
|
|
var read = function (reader, lenResult) {
|
|
return reader.read().then(function (result) {
|
|
if (result.done) {
|
|
return;
|
|
}
|
|
lenResult.value += result.value.byteLength;
|
|
return read(reader, lenResult);
|
|
});
|
|
};
|
|
|
|
var readPromises = Promise.all([read(range1Reader, result1),
|
|
read(range2Reader, result2),
|
|
promise]);
|
|
|
|
readPromises.then(function () {
|
|
expect(result1.value).toEqual(rangeSize);
|
|
expect(result2.value).toEqual(tailSize);
|
|
expect(isStreamingSupported).toEqual(false);
|
|
expect(isRangeSupported).toEqual(true);
|
|
expect(fullReaderCancelled).toEqual(true);
|
|
done();
|
|
}).catch(function (reason) {
|
|
done.fail(reason);
|
|
});
|
|
});
|
|
});
|
|
}));
|