pdfjs-dist 2.0.487 → 2.1.266

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (161) hide show
  1. package/bower.json +1 -1
  2. package/build/pdf.js +15564 -9476
  3. package/build/pdf.js.map +1 -1
  4. package/build/pdf.min.js +1 -1
  5. package/build/pdf.worker.js +46644 -36309
  6. package/build/pdf.worker.js.map +1 -1
  7. package/build/pdf.worker.min.js +1 -1
  8. package/external/url/url-lib.js +627 -0
  9. package/image_decoders/pdf.image_decoders.js +11430 -0
  10. package/image_decoders/pdf.image_decoders.js.map +1 -0
  11. package/image_decoders/pdf.image_decoders.min.js +1 -0
  12. package/lib/core/annotation.js +406 -131
  13. package/lib/core/arithmetic_decoder.js +275 -245
  14. package/lib/core/bidi.js +65 -6
  15. package/lib/core/ccitt.js +173 -18
  16. package/lib/core/ccitt_stream.js +15 -6
  17. package/lib/core/cff_parser.js +376 -53
  18. package/lib/core/charsets.js +5 -4
  19. package/lib/core/chunked_stream.js +387 -149
  20. package/lib/core/cmap.js +310 -75
  21. package/lib/core/colorspace.js +874 -594
  22. package/lib/core/crypto.js +290 -45
  23. package/lib/core/document.js +545 -260
  24. package/lib/core/encodings.js +19 -10
  25. package/lib/core/evaluator.js +725 -147
  26. package/lib/core/font_renderer.js +360 -91
  27. package/lib/core/fonts.js +791 -186
  28. package/lib/core/function.js +284 -71
  29. package/lib/core/glyphlist.js +3 -2
  30. package/lib/core/image.js +168 -61
  31. package/lib/core/jbig2.js +479 -66
  32. package/lib/core/jbig2_stream.js +19 -8
  33. package/lib/core/jpeg_stream.js +38 -13
  34. package/lib/core/jpg.js +252 -29
  35. package/lib/core/jpx.js +396 -6
  36. package/lib/core/jpx_stream.js +18 -6
  37. package/lib/core/metrics.js +4 -4
  38. package/lib/core/murmurhash3.js +24 -6
  39. package/lib/core/obj.js +1137 -475
  40. package/lib/core/operator_list.js +108 -6
  41. package/lib/core/parser.js +321 -68
  42. package/lib/core/pattern.js +145 -13
  43. package/lib/core/pdf_manager.js +321 -133
  44. package/lib/core/primitives.js +75 -22
  45. package/lib/core/ps_parser.js +134 -45
  46. package/lib/core/standard_fonts.js +10 -10
  47. package/lib/core/stream.js +313 -34
  48. package/lib/core/type1_parser.js +143 -13
  49. package/lib/core/unicode.js +31 -4
  50. package/lib/core/worker.js +210 -66
  51. package/lib/display/annotation_layer.js +361 -123
  52. package/lib/display/api.js +1454 -729
  53. package/lib/display/api_compatibility.js +11 -13
  54. package/lib/display/canvas.js +324 -29
  55. package/lib/display/content_disposition.js +83 -32
  56. package/lib/display/dom_utils.js +226 -41
  57. package/lib/display/fetch_stream.js +208 -84
  58. package/lib/display/font_loader.js +465 -236
  59. package/lib/display/metadata.js +38 -16
  60. package/lib/display/network.js +216 -51
  61. package/lib/display/network_utils.js +32 -19
  62. package/lib/display/node_stream.js +352 -169
  63. package/lib/display/pattern_helper.js +58 -7
  64. package/lib/display/svg.js +242 -29
  65. package/lib/display/text_layer.js +132 -18
  66. package/lib/display/transport_stream.js +171 -42
  67. package/lib/display/webgl.js +64 -18
  68. package/lib/display/worker_options.js +5 -4
  69. package/lib/display/xml_parser.js +166 -53
  70. package/lib/examples/node/domstubs.js +57 -4
  71. package/lib/pdf.js +21 -4
  72. package/lib/pdf.worker.js +5 -3
  73. package/lib/shared/compatibility.js +158 -564
  74. package/lib/shared/global_scope.js +2 -2
  75. package/lib/shared/is_node.js +4 -4
  76. package/lib/shared/message_handler.js +521 -0
  77. package/lib/shared/streams_polyfill.js +21 -17
  78. package/lib/shared/url_polyfill.js +56 -0
  79. package/lib/shared/util.js +295 -650
  80. package/lib/test/unit/annotation_spec.js +629 -345
  81. package/lib/test/unit/api_spec.js +555 -253
  82. package/lib/test/unit/bidi_spec.js +7 -7
  83. package/lib/test/unit/cff_parser_spec.js +40 -11
  84. package/lib/test/unit/clitests_helper.js +9 -7
  85. package/lib/test/unit/cmap_spec.js +80 -26
  86. package/lib/test/unit/colorspace_spec.js +99 -52
  87. package/lib/test/unit/crypto_spec.js +17 -5
  88. package/lib/test/unit/custom_spec.js +41 -53
  89. package/lib/test/unit/display_svg_spec.js +33 -17
  90. package/lib/test/unit/document_spec.js +3 -3
  91. package/lib/test/unit/dom_utils_spec.js +9 -9
  92. package/lib/test/unit/encodings_spec.js +25 -45
  93. package/lib/test/unit/evaluator_spec.js +34 -9
  94. package/lib/test/unit/function_spec.js +17 -5
  95. package/lib/test/unit/jasmine-boot.js +31 -18
  96. package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
  97. package/lib/test/unit/metadata_spec.js +71 -11
  98. package/lib/test/unit/murmurhash3_spec.js +3 -3
  99. package/lib/test/unit/network_spec.js +20 -5
  100. package/lib/test/unit/network_utils_spec.js +41 -14
  101. package/lib/test/unit/node_stream_spec.js +51 -27
  102. package/lib/test/unit/parser_spec.js +35 -8
  103. package/lib/test/unit/pdf_find_controller_spec.js +230 -0
  104. package/lib/test/unit/pdf_find_utils_spec.js +63 -0
  105. package/lib/test/unit/pdf_history_spec.js +21 -9
  106. package/lib/test/unit/primitives_spec.js +24 -4
  107. package/lib/test/unit/stream_spec.js +12 -4
  108. package/lib/test/unit/test_utils.js +90 -27
  109. package/lib/test/unit/testreporter.js +21 -3
  110. package/lib/test/unit/type1_parser_spec.js +8 -6
  111. package/lib/test/unit/ui_utils_spec.js +452 -14
  112. package/lib/test/unit/unicode_spec.js +14 -11
  113. package/lib/test/unit/util_spec.js +131 -9
  114. package/lib/web/annotation_layer_builder.js +39 -22
  115. package/lib/web/app.js +1240 -582
  116. package/lib/web/app_options.js +71 -41
  117. package/lib/web/base_viewer.js +508 -179
  118. package/lib/web/chromecom.js +261 -117
  119. package/lib/web/debugger.js +166 -22
  120. package/lib/web/download_manager.js +31 -13
  121. package/lib/web/firefox_print_service.js +17 -9
  122. package/lib/web/firefoxcom.js +283 -79
  123. package/lib/web/genericcom.js +89 -30
  124. package/lib/web/genericl10n.js +142 -30
  125. package/lib/web/grab_to_pan.js +26 -4
  126. package/lib/web/interfaces.js +170 -47
  127. package/lib/web/overlay_manager.js +235 -85
  128. package/lib/web/password_prompt.js +21 -13
  129. package/lib/web/pdf_attachment_viewer.js +38 -18
  130. package/lib/web/pdf_cursor_tools.js +39 -16
  131. package/lib/web/pdf_document_properties.js +80 -30
  132. package/lib/web/pdf_find_bar.js +84 -40
  133. package/lib/web/pdf_find_controller.js +495 -184
  134. package/lib/web/pdf_find_utils.js +111 -0
  135. package/lib/web/pdf_history.js +190 -53
  136. package/lib/web/pdf_link_service.js +137 -76
  137. package/lib/web/pdf_outline_viewer.js +73 -22
  138. package/lib/web/pdf_page_view.js +196 -63
  139. package/lib/web/pdf_presentation_mode.js +99 -34
  140. package/lib/web/pdf_print_service.js +57 -11
  141. package/lib/web/pdf_rendering_queue.js +27 -5
  142. package/lib/web/pdf_sidebar.js +120 -67
  143. package/lib/web/pdf_sidebar_resizer.js +42 -16
  144. package/lib/web/pdf_single_page_viewer.js +74 -66
  145. package/lib/web/pdf_thumbnail_view.js +103 -32
  146. package/lib/web/pdf_thumbnail_viewer.js +64 -24
  147. package/lib/web/pdf_viewer.component.js +112 -32
  148. package/lib/web/pdf_viewer.js +91 -52
  149. package/lib/web/preferences.js +275 -80
  150. package/lib/web/secondary_toolbar.js +165 -40
  151. package/lib/web/text_layer_builder.js +162 -65
  152. package/lib/web/toolbar.js +78 -43
  153. package/lib/web/ui_utils.js +462 -136
  154. package/lib/web/view_history.js +215 -67
  155. package/lib/web/viewer_compatibility.js +4 -13
  156. package/package.json +5 -4
  157. package/web/pdf_viewer.css +58 -1
  158. package/web/pdf_viewer.js +6346 -3919
  159. package/web/pdf_viewer.js.map +1 -1
  160. package/lib/test/unit/fonts_spec.js +0 -81
  161. package/lib/web/dom_events.js +0 -137
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2017 Mozilla Foundation
5
+ * Copyright 2018 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,83 +19,45 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
24
+ var _util = require("../../shared/util");
25
25
 
26
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
26
+ var _api = require("../../display/api");
27
27
 
28
- var _util = require('../../shared/util');
28
+ var _message_handler = require("../../shared/message_handler");
29
29
 
30
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
31
-
32
- describe('util_stream', function () {
33
- var FakePort = function () {
34
- function FakePort() {
35
- _classCallCheck(this, FakePort);
36
-
37
- this._listeners = [];
38
- this._deferred = Promise.resolve(undefined);
39
- }
40
-
41
- _createClass(FakePort, [{
42
- key: 'postMessage',
43
- value: function postMessage(obj) {
44
- var _this = this;
45
-
46
- var event = { data: obj };
47
- this._deferred.then(function () {
48
- _this._listeners.forEach(function (listener) {
49
- listener.call(this, event);
50
- }, _this);
51
- });
52
- }
53
- }, {
54
- key: 'addEventListener',
55
- value: function addEventListener(name, listener) {
56
- this._listeners.push(listener);
57
- }
58
- }, {
59
- key: 'removeEventListener',
60
- value: function removeEventListener(name, listener) {
61
- var i = this._listeners.indexOf(listener);
62
- this._listeners.splice(i, 1);
63
- }
64
- }, {
65
- key: 'terminate',
66
- value: function terminate() {
67
- this._listeners = [];
68
- }
69
- }]);
70
-
71
- return FakePort;
72
- }();
30
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
73
31
 
32
+ describe('message_handler', function () {
74
33
  function sleep(ticks) {
75
34
  return Promise.resolve().then(function () {
76
35
  return ticks && sleep(ticks - 1);
77
36
  });
78
37
  }
38
+
79
39
  describe('sendWithStream', function () {
80
40
  it('should return a ReadableStream', function () {
81
- var port = new FakePort();
82
- var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
41
+ var port = new _api.LoopbackPort();
42
+ var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
83
43
  var readable = messageHandler1.sendWithStream('fakeHandler');
84
- expect(typeof readable === 'undefined' ? 'undefined' : _typeof(readable)).toEqual('object');
44
+ expect(_typeof(readable)).toEqual('object');
85
45
  expect(_typeof(readable.getReader)).toEqual('function');
86
46
  });
87
47
  it('should read using a reader', function (done) {
88
48
  var log = '';
89
- var port = new FakePort();
90
- var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
91
- var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
49
+ var port = new _api.LoopbackPort();
50
+ var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
51
+ var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
92
52
  messageHandler2.on('fakeHandler', function (data, sink) {
93
53
  sink.onPull = function () {
94
54
  log += 'p';
95
55
  };
56
+
96
57
  sink.onCancel = function (reason) {
97
58
  log += 'c';
98
59
  };
60
+
99
61
  sink.ready.then(function () {
100
62
  sink.enqueue('hi');
101
63
  return sink.ready;
@@ -129,15 +91,17 @@ describe('util_stream', function () {
129
91
  });
130
92
  it('should not read any data when cancelled', function (done) {
131
93
  var log = '';
132
- var port = new FakePort();
133
- var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
94
+ var port = new _api.LoopbackPort();
95
+ var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
134
96
  messageHandler2.on('fakeHandler', function (data, sink) {
135
97
  sink.onPull = function () {
136
98
  log += 'p';
137
99
  };
100
+
138
101
  sink.onCancel = function (reason) {
139
102
  log += 'c';
140
103
  };
104
+
141
105
  log += '0';
142
106
  sink.ready.then(function () {
143
107
  log += '1';
@@ -154,7 +118,7 @@ describe('util_stream', function () {
154
118
  log += '4';
155
119
  });
156
120
  });
157
- var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
121
+ var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
158
122
  var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
159
123
  highWaterMark: 4,
160
124
  size: function size(arr) {
@@ -179,15 +143,17 @@ describe('util_stream', function () {
179
143
  });
180
144
  it('should not read when errored', function (done) {
181
145
  var log = '';
182
- var port = new FakePort();
183
- var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
146
+ var port = new _api.LoopbackPort();
147
+ var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
184
148
  messageHandler2.on('fakeHandler', function (data, sink) {
185
149
  sink.onPull = function () {
186
150
  log += 'p';
187
151
  };
152
+
188
153
  sink.onCancel = function (reason) {
189
154
  log += 'c';
190
155
  };
156
+
191
157
  sink.ready.then(function () {
192
158
  sink.enqueue([1, 2, 3, 4], 4);
193
159
  return sink.ready;
@@ -196,7 +162,7 @@ describe('util_stream', function () {
196
162
  sink.error('error');
197
163
  });
198
164
  });
199
- var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
165
+ var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
200
166
  var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
201
167
  highWaterMark: 4,
202
168
  size: function size(arr) {
@@ -218,15 +184,17 @@ describe('util_stream', function () {
218
184
  });
219
185
  it('should read data with blocking promise', function (done) {
220
186
  var log = '';
221
- var port = new FakePort();
222
- var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
187
+ var port = new _api.LoopbackPort();
188
+ var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
223
189
  messageHandler2.on('fakeHandler', function (data, sink) {
224
190
  sink.onPull = function () {
225
191
  log += 'p';
226
192
  };
193
+
227
194
  sink.onCancel = function (reason) {
228
195
  log += 'c';
229
196
  };
197
+
230
198
  log += '0';
231
199
  sink.ready.then(function () {
232
200
  log += '1';
@@ -240,7 +208,7 @@ describe('util_stream', function () {
240
208
  sink.close();
241
209
  });
242
210
  });
243
- var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
211
+ var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
244
212
  var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
245
213
  highWaterMark: 4,
246
214
  size: function size(arr) {
@@ -273,15 +241,17 @@ describe('util_stream', function () {
273
241
  });
274
242
  it('should read data with blocking promise and buffer whole data' + ' into stream', function (done) {
275
243
  var log = '';
276
- var port = new FakePort();
277
- var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
244
+ var port = new _api.LoopbackPort();
245
+ var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
278
246
  messageHandler2.on('fakeHandler', function (data, sink) {
279
247
  sink.onPull = function () {
280
248
  log += 'p';
281
249
  };
250
+
282
251
  sink.onCancel = function (reason) {
283
252
  log += 'c';
284
253
  };
254
+
285
255
  log += '0';
286
256
  sink.ready.then(function () {
287
257
  log += '1';
@@ -296,7 +266,7 @@ describe('util_stream', function () {
296
266
  });
297
267
  return sleep(10);
298
268
  });
299
- var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
269
+ var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
300
270
  var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
301
271
  highWaterMark: 8,
302
272
  size: function size(arr) {
@@ -329,16 +299,18 @@ describe('util_stream', function () {
329
299
  });
330
300
  it('should ignore any pull after close is called', function (done) {
331
301
  var log = '';
332
- var port = new FakePort();
302
+ var port = new _api.LoopbackPort();
333
303
  var capability = (0, _util.createPromiseCapability)();
334
- var messageHandler2 = new _util.MessageHandler('worker', 'main', port);
304
+ var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
335
305
  messageHandler2.on('fakeHandler', function (data, sink) {
336
306
  sink.onPull = function () {
337
307
  log += 'p';
338
308
  };
309
+
339
310
  sink.onCancel = function (reason) {
340
311
  log += 'c';
341
312
  };
313
+
342
314
  log += '0';
343
315
  sink.ready.then(function () {
344
316
  log += '1';
@@ -348,7 +320,7 @@ describe('util_stream', function () {
348
320
  sink.close();
349
321
  });
350
322
  });
351
- var messageHandler1 = new _util.MessageHandler('main', 'worker', port);
323
+ var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
352
324
  var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
353
325
  highWaterMark: 10,
354
326
  size: function size(arr) {
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2017 Mozilla Foundation
5
+ * Copyright 2018 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,32 +19,38 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _metadata = require('../../display/metadata');
24
+ var _util = require("../../shared/util");
25
+
26
+ var _metadata = require("../../display/metadata");
25
27
 
26
28
  describe('metadata', function () {
27
29
  it('should handle valid metadata', function () {
28
- var validData = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title><rdf:Alt><rdf:li xml:lang="x-default">Foo bar baz</rdf:li>' + '</rdf:Alt></dc:title></rdf:Description></rdf:RDF></x:xmpmeta>';
29
- var metadata = new _metadata.Metadata(validData);
30
+ var data = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title><rdf:Alt><rdf:li xml:lang="x-default">Foo bar baz</rdf:li>' + '</rdf:Alt></dc:title></rdf:Description></rdf:RDF></x:xmpmeta>';
31
+ var metadata = new _metadata.Metadata(data);
30
32
  expect(metadata.has('dc:title')).toBeTruthy();
31
33
  expect(metadata.has('dc:qux')).toBeFalsy();
32
34
  expect(metadata.get('dc:title')).toEqual('Foo bar baz');
33
35
  expect(metadata.get('dc:qux')).toEqual(null);
34
- expect(metadata.getAll()).toEqual({ 'dc:title': 'Foo bar baz' });
36
+ expect(metadata.getAll()).toEqual({
37
+ 'dc:title': 'Foo bar baz'
38
+ });
35
39
  });
36
40
  it('should repair and handle invalid metadata', function () {
37
- var invalidData = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title>\\376\\377\\000P\\000D\\000F\\000&</dc:title>' + '</rdf:Description></rdf:RDF></x:xmpmeta>';
38
- var metadata = new _metadata.Metadata(invalidData);
41
+ var data = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title>\\376\\377\\000P\\000D\\000F\\000&</dc:title>' + '</rdf:Description></rdf:RDF></x:xmpmeta>';
42
+ var metadata = new _metadata.Metadata(data);
39
43
  expect(metadata.has('dc:title')).toBeTruthy();
40
44
  expect(metadata.has('dc:qux')).toBeFalsy();
41
45
  expect(metadata.get('dc:title')).toEqual('PDF&');
42
46
  expect(metadata.get('dc:qux')).toEqual(null);
43
- expect(metadata.getAll()).toEqual({ 'dc:title': 'PDF&' });
47
+ expect(metadata.getAll()).toEqual({
48
+ 'dc:title': 'PDF&'
49
+ });
44
50
  });
45
51
  it('should repair and handle invalid metadata (bug 1424938)', function () {
46
- var invalidData = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\' ' + 'x:xmptk=\'XMP toolkit 2.9.1-13, framework 1.6\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\' ' + 'xmlns:iX=\'http://ns.adobe.com/iX/1.0/\'>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:pdf=\'http://ns.adobe.com/pdf/1.3/\' ' + 'pdf:Producer=\'GPL Ghostscript 8.63\'/>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:xap=\'http://ns.adobe.com/xap/1.0/\' ' + 'xap:ModifyDate=\'2009-02-13T12:42:54+01:00\' ' + 'xap:CreateDate=\'2009-02-13T12:42:54+01:00\'>' + '<xap:CreatorTool>\\376\\377\\000P\\000D\\000F\\000C\\000r\\000e\\000a' + '\\000t\\000o\\000r\\000 \\000V\\000e\\000r\\000s\\000i\\000o\\000n' + '\\000 \\0000\\000.\\0009\\000.\\0006</xap:CreatorTool>' + '</rdf:Description><rdf:Description ' + 'rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:xapMM=\'http://ns.adobe.com/xap/1.0/mm/\' ' + 'xapMM:DocumentID=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\'/>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:dc=\'http://purl.org/dc/elements/1.1/\' ' + 'dc:format=\'application/pdf\'><dc:title><rdf:Alt>' + '<rdf:li xml:lang=\'x-default\'>\\376\\377\\000L\\000&apos;\\000O\\000d' + '\\000i\\000s\\000s\\000e\\000e\\000 \\000t\\000h\\000\\351\\000m\\000a' + '\\000t\\000i\\000q\\000u\\000e\\000 \\000l\\000o\\000g\\000o\\000 ' + '\\000O\\000d\\000i\\000s\\000s\\000\\351\\000\\351\\000 \\000-\\000 ' + '\\000d\\000\\351\\000c\\000e\\000m\\000b\\000r\\000e\\000 \\0002\\0000' + '\\0000\\0008\\000.\\000p\\000u\\000b</rdf:li></rdf:Alt></dc:title>' + '<dc:creator><rdf:Seq><rdf:li>\\376\\377\\000O\\000D\\000I\\000S' + '</rdf:li></rdf:Seq></dc:creator></rdf:Description></rdf:RDF>' + '</x:xmpmeta>';
47
- var metadata = new _metadata.Metadata(invalidData);
52
+ var data = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\' ' + 'x:xmptk=\'XMP toolkit 2.9.1-13, framework 1.6\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\' ' + 'xmlns:iX=\'http://ns.adobe.com/iX/1.0/\'>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:pdf=\'http://ns.adobe.com/pdf/1.3/\' ' + 'pdf:Producer=\'GPL Ghostscript 8.63\'/>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:xap=\'http://ns.adobe.com/xap/1.0/\' ' + 'xap:ModifyDate=\'2009-02-13T12:42:54+01:00\' ' + 'xap:CreateDate=\'2009-02-13T12:42:54+01:00\'>' + '<xap:CreatorTool>\\376\\377\\000P\\000D\\000F\\000C\\000r\\000e\\000a' + '\\000t\\000o\\000r\\000 \\000V\\000e\\000r\\000s\\000i\\000o\\000n' + '\\000 \\0000\\000.\\0009\\000.\\0006</xap:CreatorTool>' + '</rdf:Description><rdf:Description ' + 'rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:xapMM=\'http://ns.adobe.com/xap/1.0/mm/\' ' + 'xapMM:DocumentID=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\'/>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:dc=\'http://purl.org/dc/elements/1.1/\' ' + 'dc:format=\'application/pdf\'><dc:title><rdf:Alt>' + '<rdf:li xml:lang=\'x-default\'>\\376\\377\\000L\\000&apos;\\000O\\000d' + '\\000i\\000s\\000s\\000e\\000e\\000 \\000t\\000h\\000\\351\\000m\\000a' + '\\000t\\000i\\000q\\000u\\000e\\000 \\000l\\000o\\000g\\000o\\000 ' + '\\000O\\000d\\000i\\000s\\000s\\000\\351\\000\\351\\000 \\000-\\000 ' + '\\000d\\000\\351\\000c\\000e\\000m\\000b\\000r\\000e\\000 \\0002\\0000' + '\\0000\\0008\\000.\\000p\\000u\\000b</rdf:li></rdf:Alt></dc:title>' + '<dc:creator><rdf:Seq><rdf:li>\\376\\377\\000O\\000D\\000I\\000S' + '</rdf:li></rdf:Seq></dc:creator></rdf:Description></rdf:RDF>' + '</x:xmpmeta>';
53
+ var metadata = new _metadata.Metadata(data);
48
54
  expect(metadata.has('dc:title')).toBeTruthy();
49
55
  expect(metadata.has('dc:qux')).toBeFalsy();
50
56
  expect(metadata.get('dc:title')).toEqual('L\'Odissee thématique logo Odisséé - décembre 2008.pub');
@@ -55,4 +61,58 @@ describe('metadata', function () {
55
61
  'xap:creatortool': 'PDFCreator Version 0.9.6'
56
62
  });
57
63
  });
64
+ it('should gracefully handle incomplete tags (issue 8884)', function () {
65
+ var data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d' + '<x:xmpmeta xmlns:x="adobe:ns:meta/">' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about=""' + 'xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">' + '</rdf:Description>' + '<rdf:Description rdf:about=""' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + '<xap:ModifyDate>2010-03-25T11:20:09-04:00</xap:ModifyDate>' + '<xap:CreateDate>2010-03-25T11:20:09-04:00</xap:CreateDate>' + '<xap:MetadataDate>2010-03-25T11:20:09-04:00</xap:MetadataDate>' + '</rdf:Description>' + '<rdf:Description rdf:about=""' + 'xmlns:dc="http://purl.org/dc/elements/1.1/">' + '<dc:format>application/pdf</dc:format>' + '</rdf:Description>' + '<rdf:Description rdf:about=""' + 'xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">' + '<pdfaid:part>1</pdfaid:part>' + '<pdfaid:conformance>A</pdfaid:conformance>' + '</rdf:Description>' + '</rdf:RDF>' + '</x:xmpmeta>' + '<?xpacket end="w"?>';
66
+ var metadata = new _metadata.Metadata(data);
67
+ expect((0, _util.isEmptyObj)(metadata.getAll())).toEqual(true);
68
+ });
69
+ it('should gracefully handle "junk" before the actual metadata (issue 10395)', function () {
70
+ var data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>' + '<x:xmpmeta x:xmptk="TallComponents PDFObjects 1.0" ' + 'xmlns:x="adobe:ns:meta/">' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about="" ' + 'xmlns:pdf="http://ns.adobe.com/pdf/1.3/">' + '<pdf:Producer>PDFKit.NET 4.0.102.0</pdf:Producer>' + '<pdf:Keywords></pdf:Keywords>' + '<pdf:PDFVersion>1.7</pdf:PDFVersion></rdf:Description>' + '<rdf:Description rdf:about="" ' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + '<xap:CreateDate>2018-12-27T13:50:36-08:00</xap:CreateDate>' + '<xap:ModifyDate>2018-12-27T13:50:38-08:00</xap:ModifyDate>' + '<xap:CreatorTool></xap:CreatorTool>' + '<xap:MetadataDate>2018-12-27T13:50:38-08:00</xap:MetadataDate>' + '</rdf:Description><rdf:Description rdf:about="" ' + 'xmlns:dc="http://purl.org/dc/elements/1.1/">' + '<dc:creator><rdf:Seq><rdf:li></rdf:li></rdf:Seq></dc:creator>' + '<dc:subject><rdf:Bag /></dc:subject>' + '<dc:description><rdf:Alt><rdf:li xml:lang="x-default">' + '</rdf:li></rdf:Alt></dc:description>' + '<dc:title><rdf:Alt><rdf:li xml:lang="x-default"></rdf:li>' + '</rdf:Alt></dc:title><dc:format>application/pdf</dc:format>' + '</rdf:Description></rdf:RDF></x:xmpmeta><?xpacket end="w"?>';
71
+ var metadata = new _metadata.Metadata(data);
72
+ expect(metadata.has('dc:title')).toBeTruthy();
73
+ expect(metadata.has('dc:qux')).toBeFalsy();
74
+ expect(metadata.get('dc:title')).toEqual('');
75
+ expect(metadata.get('dc:qux')).toEqual(null);
76
+ expect(metadata.getAll()).toEqual({
77
+ 'dc:creator': '',
78
+ 'dc:description': '',
79
+ 'dc:format': 'application/pdf',
80
+ 'dc:subject': '',
81
+ 'dc:title': '',
82
+ 'pdf:keywords': '',
83
+ 'pdf:pdfversion': '1.7',
84
+ 'pdf:producer': 'PDFKit.NET 4.0.102.0',
85
+ 'xap:createdate': '2018-12-27T13:50:36-08:00',
86
+ 'xap:creatortool': '',
87
+ 'xap:metadatadate': '2018-12-27T13:50:38-08:00',
88
+ 'xap:modifydate': '2018-12-27T13:50:38-08:00'
89
+ });
90
+ });
91
+ it('should correctly handle metadata containing "&apos" (issue 10407)', function () {
92
+ var data = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title><rdf:Alt>' + '<rdf:li xml:lang="x-default">&apos;Foo bar baz&apos;</rdf:li>' + '</rdf:Alt></dc:title></rdf:Description></rdf:RDF></x:xmpmeta>';
93
+ var metadata = new _metadata.Metadata(data);
94
+ expect(metadata.has('dc:title')).toBeTruthy();
95
+ expect(metadata.has('dc:qux')).toBeFalsy();
96
+ expect(metadata.get('dc:title')).toEqual('\'Foo bar baz\'');
97
+ expect(metadata.get('dc:qux')).toEqual(null);
98
+ expect(metadata.getAll()).toEqual({
99
+ 'dc:title': '\'Foo bar baz\''
100
+ });
101
+ });
102
+ it('should gracefully handle unbalanced end tags (issue 10410)', function () {
103
+ var data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about="" ' + 'xmlns:pdf="http://ns.adobe.com/pdf/1.3/">' + '<pdf:Producer>Soda PDF 5</pdf:Producer></rdf:Description>' + '<rdf:Description rdf:about="" ' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + '<xap:CreateDate>2018-10-02T08:14:49-05:00</xap:CreateDate>' + '<xap:CreatorTool>Soda PDF 5</xap:CreatorTool>' + '<xap:MetadataDate>2018-10-02T08:14:49-05:00</xap:MetadataDate> ' + '<xap:ModifyDate>2018-10-02T08:14:49-05:00</xap:ModifyDate>' + '</rdf:Description><rdf:Description rdf:about="" ' + 'xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">' + '<xmpMM:DocumentID>uuid:00000000-1c84-3cf9-89ba-bef0e729c831' + '</xmpMM:DocumentID></rdf:Description>' + '</rdf:RDF></x:xmpmeta><?xpacket end="w"?>';
104
+ var metadata = new _metadata.Metadata(data);
105
+ expect((0, _util.isEmptyObj)(metadata.getAll())).toEqual(true);
106
+ });
107
+ it('should not be vulnerable to the billion laughs attack', function () {
108
+ var data = '<?xml version="1.0"?>' + '<!DOCTYPE lolz [' + ' <!ENTITY lol "lol">' + ' <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">' + ' <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">' + ' <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">' + ' <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">' + ' <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">' + ' <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">' + ' <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">' + ' <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">' + ' <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">' + ']>' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + ' <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/">' + ' <dc:title>' + ' <rdf:Alt>' + ' <rdf:li xml:lang="x-default">a&lol9;b</rdf:li>' + ' </rdf:Alt>' + ' </dc:title>' + ' </rdf:Description>' + '</rdf:RDF>';
109
+ var metadata = new _metadata.Metadata(data);
110
+ expect(metadata.has('dc:title')).toBeTruthy();
111
+ expect(metadata.has('dc:qux')).toBeFalsy();
112
+ expect(metadata.get('dc:title')).toEqual('a&lol9;b');
113
+ expect(metadata.get('dc:qux')).toEqual(null);
114
+ expect(metadata.getAll()).toEqual({
115
+ 'dc:title': 'a&lol9;b'
116
+ });
117
+ });
58
118
  });
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2017 Mozilla Foundation
5
+ * Copyright 2018 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,9 +19,9 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _murmurhash = require('../../core/murmurhash3');
24
+ var _murmurhash = require("../../core/murmurhash3");
25
25
 
26
26
  describe('MurmurHash3_64', function () {
27
27
  it('instantiates without seed', function () {
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2017 Mozilla Foundation
5
+ * Copyright 2018 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,9 +19,9 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _network = require('../../display/network');
24
+ var _network = require("../../display/network");
25
25
 
26
26
  describe('network', function () {
27
27
  var pdf1 = new URL('../pdfs/tracemonkey.pdf', window.location).href;
@@ -43,16 +43,19 @@ describe('network', function () {
43
43
  });
44
44
  var len = 0,
45
45
  count = 0;
46
+
46
47
  var read = function read() {
47
48
  return fullReader.read().then(function (result) {
48
49
  if (result.done) {
49
50
  return;
50
51
  }
52
+
51
53
  count++;
52
54
  len += result.value.byteLength;
53
55
  return read();
54
56
  });
55
57
  };
58
+
56
59
  var readPromise = Promise.all([read(), promise]);
57
60
  readPromise.then(function (page) {
58
61
  expect(len).toEqual(pdf1Length);
@@ -67,11 +70,13 @@ describe('network', function () {
67
70
  it('read with streaming', function (done) {
68
71
  var userAgent = window.navigator.userAgent;
69
72
  var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent);
73
+
70
74
  if (!m || m[1] < 9) {
71
75
  expect(true).toEqual(true);
72
76
  done();
73
77
  return;
74
78
  }
79
+
75
80
  var stream = new _network.PDFNetworkStream({
76
81
  url: pdf2,
77
82
  rangeChunkSize: 65536,
@@ -86,16 +91,19 @@ describe('network', function () {
86
91
  });
87
92
  var len = 0,
88
93
  count = 0;
94
+
89
95
  var read = function read() {
90
96
  return fullReader.read().then(function (result) {
91
97
  if (result.done) {
92
98
  return;
93
99
  }
100
+
94
101
  count++;
95
102
  len += result.value.byteLength;
96
103
  return read();
97
104
  });
98
105
  };
106
+
99
107
  var readPromise = Promise.all([read(), promise]);
100
108
  readPromise.then(function () {
101
109
  expect(len).toEqual(pdf2Length);
@@ -127,17 +135,24 @@ describe('network', function () {
127
135
  var tailSize = pdf1Length % rangeSize || rangeSize;
128
136
  var range1Reader = stream.getRangeReader(pdf1Length - tailSize - rangeSize, pdf1Length - tailSize);
129
137
  var range2Reader = stream.getRangeReader(pdf1Length - tailSize, pdf1Length);
130
- var result1 = { value: 0 },
131
- result2 = { value: 0 };
138
+ var result1 = {
139
+ value: 0
140
+ },
141
+ result2 = {
142
+ value: 0
143
+ };
144
+
132
145
  var read = function read(reader, lenResult) {
133
146
  return reader.read().then(function (result) {
134
147
  if (result.done) {
135
148
  return;
136
149
  }
150
+
137
151
  lenResult.value += result.value.byteLength;
138
152
  return read(reader, lenResult);
139
153
  });
140
154
  };
155
+
141
156
  var readPromises = Promise.all([read(range1Reader, result1), read(range2Reader, result2), promise]);
142
157
  readPromises.then(function () {
143
158
  expect(result1.value).toEqual(rangeSize);
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2017 Mozilla Foundation
5
+ * Copyright 2018 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,34 +19,48 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _network_utils = require('../../display/network_utils');
24
+ var _network_utils = require("../../display/network_utils");
25
25
 
26
- var _util = require('../../shared/util');
26
+ var _util = require("../../shared/util");
27
27
 
28
28
  describe('network_utils', function () {
29
29
  describe('validateRangeRequestCapabilities', function () {
30
- var defaultValues = {
31
- allowRangeRequests: false,
32
- suggestedLength: undefined
33
- };
34
30
  it('rejects range chunk sizes that are not larger than zero', function () {
35
31
  expect(function () {
36
- (0, _network_utils.validateRangeRequestCapabilities)({ rangeChunkSize: 0 });
32
+ (0, _network_utils.validateRangeRequestCapabilities)({
33
+ rangeChunkSize: 0
34
+ });
37
35
  }).toThrow(new Error('Range chunk size must be larger than zero'));
38
36
  });
39
37
  it('rejects disabled or non-HTTP range requests', function () {
40
38
  expect((0, _network_utils.validateRangeRequestCapabilities)({
41
39
  disableRange: true,
42
40
  isHttp: true,
41
+ getResponseHeader: function getResponseHeader(headerName) {
42
+ if (headerName === 'Content-Length') {
43
+ return 8;
44
+ }
45
+ },
43
46
  rangeChunkSize: 64
44
- })).toEqual(defaultValues);
47
+ })).toEqual({
48
+ allowRangeRequests: false,
49
+ suggestedLength: 8
50
+ });
45
51
  expect((0, _network_utils.validateRangeRequestCapabilities)({
46
52
  disableRange: false,
47
53
  isHttp: false,
54
+ getResponseHeader: function getResponseHeader(headerName) {
55
+ if (headerName === 'Content-Length') {
56
+ return 8;
57
+ }
58
+ },
48
59
  rangeChunkSize: 64
49
- })).toEqual(defaultValues);
60
+ })).toEqual({
61
+ allowRangeRequests: false,
62
+ suggestedLength: 8
63
+ });
50
64
  });
51
65
  it('rejects invalid Accept-Ranges header values', function () {
52
66
  expect((0, _network_utils.validateRangeRequestCapabilities)({
@@ -55,10 +69,15 @@ describe('network_utils', function () {
55
69
  getResponseHeader: function getResponseHeader(headerName) {
56
70
  if (headerName === 'Accept-Ranges') {
57
71
  return 'none';
72
+ } else if (headerName === 'Content-Length') {
73
+ return 8;
58
74
  }
59
75
  },
60
76
  rangeChunkSize: 64
61
- })).toEqual(defaultValues);
77
+ })).toEqual({
78
+ allowRangeRequests: false,
79
+ suggestedLength: 8
80
+ });
62
81
  });
63
82
  it('rejects invalid Content-Encoding header values', function () {
64
83
  expect((0, _network_utils.validateRangeRequestCapabilities)({
@@ -69,10 +88,15 @@ describe('network_utils', function () {
69
88
  return 'bytes';
70
89
  } else if (headerName === 'Content-Encoding') {
71
90
  return 'gzip';
91
+ } else if (headerName === 'Content-Length') {
92
+ return 8;
72
93
  }
73
94
  },
74
95
  rangeChunkSize: 64
75
- })).toEqual(defaultValues);
96
+ })).toEqual({
97
+ allowRangeRequests: false,
98
+ suggestedLength: 8
99
+ });
76
100
  });
77
101
  it('rejects invalid Content-Length header values', function () {
78
102
  expect((0, _network_utils.validateRangeRequestCapabilities)({
@@ -88,7 +112,10 @@ describe('network_utils', function () {
88
112
  }
89
113
  },
90
114
  rangeChunkSize: 64
91
- })).toEqual(defaultValues);
115
+ })).toEqual({
116
+ allowRangeRequests: false,
117
+ suggestedLength: undefined
118
+ });
92
119
  });
93
120
  it('rejects file sizes that are too small for range requests', function () {
94
121
  expect((0, _network_utils.validateRangeRequestCapabilities)({