UNPKG

5.2 kBJavaScriptView Raw
1/**
2 * @licstart The following is the entire license notice for the
3 * Javascript code in this page
4 *
5 * Copyright 2017 Mozilla Foundation
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 *
19 * @licend The above is the entire license notice for the
20 * Javascript code in this page
21 */
22'use strict';
23
24var _network = require('../../display/network');
25
26describe('network', function () {
27 var pdf1 = new URL('../pdfs/tracemonkey.pdf', window.location).href;
28 var pdf1Length = 1016315;
29 var pdf2 = new URL('../pdfs/pdf.pdf', window.location).href;
30 var pdf2Length = 32472771;
31 it('read without stream and range', function (done) {
32 var stream = new _network.PDFNetworkStream({
33 url: pdf1,
34 rangeChunkSize: 65536,
35 disableStream: true,
36 disableRange: true
37 });
38 var fullReader = stream.getFullReader();
39 var isStreamingSupported, isRangeSupported;
40 var promise = fullReader.headersReady.then(function () {
41 isStreamingSupported = fullReader.isStreamingSupported;
42 isRangeSupported = fullReader.isRangeSupported;
43 });
44 var len = 0,
45 count = 0;
46 var read = function read() {
47 return fullReader.read().then(function (result) {
48 if (result.done) {
49 return;
50 }
51 count++;
52 len += result.value.byteLength;
53 return read();
54 });
55 };
56 var readPromise = Promise.all([read(), promise]);
57 readPromise.then(function (page) {
58 expect(len).toEqual(pdf1Length);
59 expect(count).toEqual(1);
60 expect(isStreamingSupported).toEqual(false);
61 expect(isRangeSupported).toEqual(false);
62 done();
63 }).catch(function (reason) {
64 done.fail(reason);
65 });
66 });
67 it('read with streaming', function (done) {
68 var userAgent = window.navigator.userAgent;
69 var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent);
70 if (!m || m[1] < 9) {
71 expect(true).toEqual(true);
72 done();
73 return;
74 }
75 var stream = new _network.PDFNetworkStream({
76 url: pdf2,
77 rangeChunkSize: 65536,
78 disableStream: false,
79 disableRange: false
80 });
81 var fullReader = stream.getFullReader();
82 var isStreamingSupported, isRangeSupported;
83 var promise = fullReader.headersReady.then(function () {
84 isStreamingSupported = fullReader.isStreamingSupported;
85 isRangeSupported = fullReader.isRangeSupported;
86 });
87 var len = 0,
88 count = 0;
89 var read = function read() {
90 return fullReader.read().then(function (result) {
91 if (result.done) {
92 return;
93 }
94 count++;
95 len += result.value.byteLength;
96 return read();
97 });
98 };
99 var readPromise = Promise.all([read(), promise]);
100 readPromise.then(function () {
101 expect(len).toEqual(pdf2Length);
102 expect(count).toBeGreaterThan(1);
103 expect(isStreamingSupported).toEqual(true);
104 expect(isRangeSupported).toEqual(true);
105 done();
106 }).catch(function (reason) {
107 done.fail(reason);
108 });
109 });
110 it('read custom ranges', function (done) {
111 var rangeSize = 32768;
112 var stream = new _network.PDFNetworkStream({
113 url: pdf1,
114 length: pdf1Length,
115 rangeChunkSize: rangeSize,
116 disableStream: true,
117 disableRange: false
118 });
119 var fullReader = stream.getFullReader();
120 var isStreamingSupported, isRangeSupported, fullReaderCancelled;
121 var promise = fullReader.headersReady.then(function () {
122 isStreamingSupported = fullReader.isStreamingSupported;
123 isRangeSupported = fullReader.isRangeSupported;
124 fullReader.cancel('Don\'t need full reader');
125 fullReaderCancelled = true;
126 });
127 var tailSize = pdf1Length % rangeSize || rangeSize;
128 var range1Reader = stream.getRangeReader(pdf1Length - tailSize - rangeSize, pdf1Length - tailSize);
129 var range2Reader = stream.getRangeReader(pdf1Length - tailSize, pdf1Length);
130 var result1 = { value: 0 },
131 result2 = { value: 0 };
132 var read = function read(reader, lenResult) {
133 return reader.read().then(function (result) {
134 if (result.done) {
135 return;
136 }
137 lenResult.value += result.value.byteLength;
138 return read(reader, lenResult);
139 });
140 };
141 var readPromises = Promise.all([read(range1Reader, result1), read(range2Reader, result2), promise]);
142 readPromises.then(function () {
143 expect(result1.value).toEqual(rangeSize);
144 expect(result2.value).toEqual(tailSize);
145 expect(isStreamingSupported).toEqual(false);
146 expect(isRangeSupported).toEqual(true);
147 expect(fullReaderCancelled).toEqual(true);
148 done();
149 }).catch(function (reason) {
150 done.fail(reason);
151 });
152 });
153});
\No newline at end of file