pdfjs-dist 2.1.266 → 2.5.207
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.
- package/CODE_OF_CONDUCT.md +15 -0
- package/README.md +4 -0
- package/bower.json +1 -1
- package/build/pdf.js +8382 -18492
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +22 -1
- package/build/pdf.worker.entry.js +5 -3
- package/build/pdf.worker.js +20417 -29816
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +22 -1
- package/es5/build/pdf.js +25688 -0
- package/es5/build/pdf.js.map +1 -0
- package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
- package/es5/build/pdf.worker.js +58239 -0
- package/es5/build/pdf.worker.js.map +1 -0
- package/es5/web/images/annotation-check.svg +11 -0
- package/es5/web/images/annotation-comment.svg +16 -0
- package/es5/web/images/annotation-help.svg +26 -0
- package/es5/web/images/annotation-insert.svg +10 -0
- package/es5/web/images/annotation-key.svg +11 -0
- package/es5/web/images/annotation-newparagraph.svg +11 -0
- package/es5/web/images/annotation-noicon.svg +7 -0
- package/es5/web/images/annotation-note.svg +42 -0
- package/es5/web/images/annotation-paragraph.svg +16 -0
- package/es5/web/images/loading-icon.gif +0 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/images/texture.png +0 -0
- package/es5/web/pdf_viewer.css +403 -0
- package/es5/web/pdf_viewer.js +7742 -0
- package/es5/web/pdf_viewer.js.map +1 -0
- package/image_decoders/pdf.image_decoders.js +1475 -4897
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +22 -1
- package/lib/README.md +7 -0
- package/lib/core/annotation.js +750 -899
- package/lib/core/arithmetic_decoder.js +81 -97
- package/lib/core/bidi.js +54 -46
- package/lib/core/ccitt.js +88 -81
- package/lib/core/ccitt_stream.js +15 -14
- package/lib/core/cff_parser.js +235 -183
- package/lib/core/charsets.js +4 -4
- package/lib/core/chunked_stream.js +447 -542
- package/lib/core/cmap.js +222 -264
- package/lib/core/colorspace.js +699 -863
- package/lib/core/core_utils.js +152 -0
- package/lib/core/crypto.js +379 -437
- package/lib/core/document.js +573 -660
- package/lib/core/encodings.js +15 -15
- package/lib/core/evaluator.js +1103 -868
- package/lib/core/font_renderer.js +135 -178
- package/lib/core/fonts.js +570 -491
- package/lib/core/function.js +291 -288
- package/lib/core/glyphlist.js +4527 -4526
- package/lib/core/image.js +145 -149
- package/lib/core/image_utils.js +170 -0
- package/lib/core/jbig2.js +325 -316
- package/lib/core/jbig2_stream.js +18 -17
- package/lib/core/jpeg_stream.js +21 -26
- package/lib/core/jpg.js +284 -232
- package/lib/core/jpx.js +161 -143
- package/lib/core/jpx_stream.js +28 -28
- package/lib/core/metrics.js +2929 -2929
- package/lib/core/murmurhash3.js +90 -101
- package/lib/core/obj.js +1183 -1157
- package/lib/core/operator_list.js +99 -67
- package/lib/core/parser.js +972 -911
- package/lib/core/pattern.js +87 -70
- package/lib/core/pdf_manager.js +150 -315
- package/lib/core/primitives.js +83 -56
- package/lib/core/ps_parser.js +175 -214
- package/lib/core/standard_fonts.js +237 -236
- package/lib/core/stream.js +94 -74
- package/lib/core/type1_parser.js +87 -69
- package/lib/core/unicode.js +1654 -1654
- package/lib/core/worker.js +193 -390
- package/lib/core/worker_stream.js +168 -0
- package/lib/display/annotation_layer.js +741 -972
- package/lib/display/api.js +1500 -1791
- package/lib/display/api_compatibility.js +12 -17
- package/lib/display/canvas.js +165 -165
- package/lib/display/content_disposition.js +40 -59
- package/lib/display/display_utils.js +515 -0
- package/lib/display/fetch_stream.js +183 -298
- package/lib/display/font_loader.js +273 -413
- package/lib/display/metadata.js +86 -98
- package/lib/display/network.js +266 -359
- package/lib/display/network_utils.js +25 -18
- package/lib/display/node_stream.js +285 -458
- package/lib/display/pattern_helper.js +113 -65
- package/lib/display/svg.js +1166 -901
- package/lib/display/text_layer.js +156 -132
- package/lib/display/transport_stream.js +262 -278
- package/lib/display/webgl.js +70 -83
- package/lib/display/worker_options.js +3 -3
- package/lib/display/xml_parser.js +303 -392
- package/lib/examples/node/domstubs.js +40 -37
- package/lib/pdf.js +226 -59
- package/lib/pdf.worker.js +14 -6
- package/lib/shared/compatibility.js +3 -246
- package/lib/shared/is_node.js +7 -6
- package/lib/shared/message_handler.js +327 -332
- package/lib/shared/util.js +266 -416
- package/lib/test/unit/annotation_spec.js +1555 -701
- package/lib/test/unit/api_spec.js +802 -604
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +84 -69
- package/lib/test/unit/clitests_helper.js +7 -9
- package/lib/test/unit/cmap_spec.js +74 -76
- package/lib/test/unit/colorspace_spec.js +166 -161
- package/lib/test/unit/core_utils_spec.js +211 -0
- package/lib/test/unit/crypto_spec.js +181 -181
- package/lib/test/unit/custom_spec.js +20 -22
- package/lib/test/unit/display_svg_spec.js +34 -39
- package/lib/test/unit/display_utils_spec.js +263 -0
- package/lib/test/unit/document_spec.js +16 -21
- package/lib/test/unit/encodings_spec.js +12 -34
- package/lib/test/unit/evaluator_spec.js +83 -83
- package/lib/test/unit/fetch_stream_spec.js +111 -0
- package/lib/test/unit/function_spec.js +206 -204
- package/lib/test/unit/jasmine-boot.js +46 -30
- package/lib/test/unit/message_handler_spec.js +173 -159
- package/lib/test/unit/metadata_spec.js +69 -69
- package/lib/test/unit/murmurhash3_spec.js +12 -12
- package/lib/test/unit/network_spec.js +13 -61
- package/lib/test/unit/network_utils_spec.js +183 -119
- package/lib/test/unit/node_stream_spec.js +78 -92
- package/lib/test/unit/parser_spec.js +172 -114
- package/lib/test/unit/pdf_find_controller_spec.js +55 -86
- package/lib/test/unit/pdf_find_utils_spec.js +32 -32
- package/lib/test/unit/pdf_history_spec.js +32 -32
- package/lib/test/unit/primitives_spec.js +140 -125
- package/lib/test/unit/stream_spec.js +16 -14
- package/lib/test/unit/test_utils.js +131 -143
- package/lib/test/unit/testreporter.js +19 -19
- package/lib/test/unit/type1_parser_spec.js +42 -42
- package/lib/test/unit/ui_utils_spec.js +297 -459
- package/lib/test/unit/unicode_spec.js +38 -38
- package/lib/test/unit/util_spec.js +121 -305
- package/lib/web/annotation_layer_builder.js +66 -103
- package/lib/web/app.js +1328 -1214
- package/lib/web/app_options.js +105 -107
- package/lib/web/base_viewer.js +824 -838
- package/lib/web/chromecom.js +165 -252
- package/lib/web/debugger.js +149 -205
- package/lib/web/download_manager.js +39 -55
- package/lib/web/firefox_print_service.js +37 -27
- package/lib/web/firefoxcom.js +212 -363
- package/lib/web/genericcom.js +26 -108
- package/lib/web/genericl10n.js +24 -153
- package/lib/web/grab_to_pan.js +32 -30
- package/lib/web/interfaces.js +80 -254
- package/lib/web/overlay_manager.js +70 -246
- package/lib/web/password_prompt.js +38 -64
- package/lib/web/pdf_attachment_viewer.js +113 -131
- package/lib/web/pdf_cursor_tools.js +75 -102
- package/lib/web/pdf_document_properties.js +221 -306
- package/lib/web/pdf_find_bar.js +136 -170
- package/lib/web/pdf_find_controller.js +491 -548
- package/lib/web/pdf_find_utils.js +13 -13
- package/lib/web/pdf_history.js +397 -406
- package/lib/web/pdf_link_service.js +304 -348
- package/lib/web/pdf_outline_viewer.js +140 -175
- package/lib/web/pdf_page_view.js +452 -523
- package/lib/web/pdf_presentation_mode.js +308 -357
- package/lib/web/pdf_print_service.js +90 -104
- package/lib/web/pdf_rendering_queue.js +84 -108
- package/lib/web/pdf_sidebar.js +276 -306
- package/lib/web/pdf_sidebar_resizer.js +92 -119
- package/lib/web/pdf_single_page_viewer.js +77 -126
- package/lib/web/pdf_thumbnail_view.js +276 -297
- package/lib/web/pdf_thumbnail_viewer.js +186 -206
- package/lib/web/pdf_viewer.component.js +20 -21
- package/lib/web/pdf_viewer.js +55 -115
- package/lib/web/preferences.js +82 -286
- package/lib/web/secondary_toolbar.js +164 -196
- package/lib/web/text_layer_builder.js +282 -339
- package/lib/web/toolbar.js +217 -210
- package/lib/web/ui_utils.js +267 -420
- package/lib/web/view_history.js +52 -226
- package/lib/web/viewer_compatibility.js +21 -6
- package/package.json +2 -9
- package/web/pdf_viewer.css +35 -25
- package/web/pdf_viewer.js +3489 -4855
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +14 -5
- package/external/streams/streams-lib.js +0 -3962
- package/external/url/url-lib.js +0 -627
- package/lib/display/dom_utils.js +0 -494
- package/lib/shared/streams_polyfill.js +0 -43
- package/lib/shared/url_polyfill.js +0 -56
- package/lib/test/unit/dom_utils_spec.js +0 -89
@@ -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
|
5
|
+
* Copyright 2020 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.
|
@@ -21,27 +21,29 @@
|
|
21
21
|
*/
|
22
22
|
"use strict";
|
23
23
|
|
24
|
-
var _network_utils = require("../../display/network_utils");
|
24
|
+
var _network_utils = require("../../display/network_utils.js");
|
25
25
|
|
26
|
-
var _util = require("../../shared/util");
|
26
|
+
var _util = require("../../shared/util.js");
|
27
27
|
|
28
|
-
describe(
|
29
|
-
describe(
|
30
|
-
it(
|
28
|
+
describe("network_utils", function () {
|
29
|
+
describe("validateRangeRequestCapabilities", function () {
|
30
|
+
it("rejects range chunk sizes that are not larger than zero", function () {
|
31
31
|
expect(function () {
|
32
32
|
(0, _network_utils.validateRangeRequestCapabilities)({
|
33
33
|
rangeChunkSize: 0
|
34
34
|
});
|
35
|
-
}).toThrow(new Error(
|
35
|
+
}).toThrow(new Error("Range chunk size must be larger than zero"));
|
36
36
|
});
|
37
|
-
it(
|
37
|
+
it("rejects disabled or non-HTTP range requests", function () {
|
38
38
|
expect((0, _network_utils.validateRangeRequestCapabilities)({
|
39
39
|
disableRange: true,
|
40
40
|
isHttp: true,
|
41
|
-
getResponseHeader:
|
42
|
-
if (headerName ===
|
41
|
+
getResponseHeader: headerName => {
|
42
|
+
if (headerName === "Content-Length") {
|
43
43
|
return 8;
|
44
44
|
}
|
45
|
+
|
46
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
45
47
|
},
|
46
48
|
rangeChunkSize: 64
|
47
49
|
})).toEqual({
|
@@ -51,10 +53,12 @@ describe('network_utils', function () {
|
|
51
53
|
expect((0, _network_utils.validateRangeRequestCapabilities)({
|
52
54
|
disableRange: false,
|
53
55
|
isHttp: false,
|
54
|
-
getResponseHeader:
|
55
|
-
if (headerName ===
|
56
|
+
getResponseHeader: headerName => {
|
57
|
+
if (headerName === "Content-Length") {
|
56
58
|
return 8;
|
57
59
|
}
|
60
|
+
|
61
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
58
62
|
},
|
59
63
|
rangeChunkSize: 64
|
60
64
|
})).toEqual({
|
@@ -62,16 +66,18 @@ describe('network_utils', function () {
|
|
62
66
|
suggestedLength: 8
|
63
67
|
});
|
64
68
|
});
|
65
|
-
it(
|
69
|
+
it("rejects invalid Accept-Ranges header values", function () {
|
66
70
|
expect((0, _network_utils.validateRangeRequestCapabilities)({
|
67
71
|
disableRange: false,
|
68
72
|
isHttp: true,
|
69
|
-
getResponseHeader:
|
70
|
-
if (headerName ===
|
71
|
-
return
|
72
|
-
} else if (headerName ===
|
73
|
+
getResponseHeader: headerName => {
|
74
|
+
if (headerName === "Accept-Ranges") {
|
75
|
+
return "none";
|
76
|
+
} else if (headerName === "Content-Length") {
|
73
77
|
return 8;
|
74
78
|
}
|
79
|
+
|
80
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
75
81
|
},
|
76
82
|
rangeChunkSize: 64
|
77
83
|
})).toEqual({
|
@@ -79,18 +85,20 @@ describe('network_utils', function () {
|
|
79
85
|
suggestedLength: 8
|
80
86
|
});
|
81
87
|
});
|
82
|
-
it(
|
88
|
+
it("rejects invalid Content-Encoding header values", function () {
|
83
89
|
expect((0, _network_utils.validateRangeRequestCapabilities)({
|
84
90
|
disableRange: false,
|
85
91
|
isHttp: true,
|
86
|
-
getResponseHeader:
|
87
|
-
if (headerName ===
|
88
|
-
return
|
89
|
-
} else if (headerName ===
|
90
|
-
return
|
91
|
-
} else if (headerName ===
|
92
|
+
getResponseHeader: headerName => {
|
93
|
+
if (headerName === "Accept-Ranges") {
|
94
|
+
return "bytes";
|
95
|
+
} else if (headerName === "Content-Encoding") {
|
96
|
+
return "gzip";
|
97
|
+
} else if (headerName === "Content-Length") {
|
92
98
|
return 8;
|
93
99
|
}
|
100
|
+
|
101
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
94
102
|
},
|
95
103
|
rangeChunkSize: 64
|
96
104
|
})).toEqual({
|
@@ -98,18 +106,20 @@ describe('network_utils', function () {
|
|
98
106
|
suggestedLength: 8
|
99
107
|
});
|
100
108
|
});
|
101
|
-
it(
|
109
|
+
it("rejects invalid Content-Length header values", function () {
|
102
110
|
expect((0, _network_utils.validateRangeRequestCapabilities)({
|
103
111
|
disableRange: false,
|
104
112
|
isHttp: true,
|
105
|
-
getResponseHeader:
|
106
|
-
if (headerName ===
|
107
|
-
return
|
108
|
-
} else if (headerName ===
|
113
|
+
getResponseHeader: headerName => {
|
114
|
+
if (headerName === "Accept-Ranges") {
|
115
|
+
return "bytes";
|
116
|
+
} else if (headerName === "Content-Encoding") {
|
109
117
|
return null;
|
110
|
-
} else if (headerName ===
|
111
|
-
return
|
118
|
+
} else if (headerName === "Content-Length") {
|
119
|
+
return "eight";
|
112
120
|
}
|
121
|
+
|
122
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
113
123
|
},
|
114
124
|
rangeChunkSize: 64
|
115
125
|
})).toEqual({
|
@@ -117,18 +127,20 @@ describe('network_utils', function () {
|
|
117
127
|
suggestedLength: undefined
|
118
128
|
});
|
119
129
|
});
|
120
|
-
it(
|
130
|
+
it("rejects file sizes that are too small for range requests", function () {
|
121
131
|
expect((0, _network_utils.validateRangeRequestCapabilities)({
|
122
132
|
disableRange: false,
|
123
133
|
isHttp: true,
|
124
|
-
getResponseHeader:
|
125
|
-
if (headerName ===
|
126
|
-
return
|
127
|
-
} else if (headerName ===
|
134
|
+
getResponseHeader: headerName => {
|
135
|
+
if (headerName === "Accept-Ranges") {
|
136
|
+
return "bytes";
|
137
|
+
} else if (headerName === "Content-Encoding") {
|
128
138
|
return null;
|
129
|
-
} else if (headerName ===
|
139
|
+
} else if (headerName === "Content-Length") {
|
130
140
|
return 8;
|
131
141
|
}
|
142
|
+
|
143
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
132
144
|
},
|
133
145
|
rangeChunkSize: 64
|
134
146
|
})).toEqual({
|
@@ -136,18 +148,20 @@ describe('network_utils', function () {
|
|
136
148
|
suggestedLength: 8
|
137
149
|
});
|
138
150
|
});
|
139
|
-
it(
|
151
|
+
it("accepts file sizes large enough for range requests", function () {
|
140
152
|
expect((0, _network_utils.validateRangeRequestCapabilities)({
|
141
153
|
disableRange: false,
|
142
154
|
isHttp: true,
|
143
|
-
getResponseHeader:
|
144
|
-
if (headerName ===
|
145
|
-
return
|
146
|
-
} else if (headerName ===
|
155
|
+
getResponseHeader: headerName => {
|
156
|
+
if (headerName === "Accept-Ranges") {
|
157
|
+
return "bytes";
|
158
|
+
} else if (headerName === "Content-Encoding") {
|
147
159
|
return null;
|
148
|
-
} else if (headerName ===
|
160
|
+
} else if (headerName === "Content-Length") {
|
149
161
|
return 8192;
|
150
162
|
}
|
163
|
+
|
164
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
151
165
|
},
|
152
166
|
rangeChunkSize: 64
|
153
167
|
})).toEqual({
|
@@ -156,126 +170,176 @@ describe('network_utils', function () {
|
|
156
170
|
});
|
157
171
|
});
|
158
172
|
});
|
159
|
-
describe(
|
160
|
-
it(
|
161
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
162
|
-
if (headerName ===
|
173
|
+
describe("extractFilenameFromHeader", function () {
|
174
|
+
it("returns null when content disposition header is blank", function () {
|
175
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
176
|
+
if (headerName === "Content-Disposition") {
|
163
177
|
return null;
|
164
178
|
}
|
179
|
+
|
180
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
165
181
|
})).toBeNull();
|
166
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
167
|
-
if (headerName ===
|
182
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
183
|
+
if (headerName === "Content-Disposition") {
|
168
184
|
return undefined;
|
169
185
|
}
|
186
|
+
|
187
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
170
188
|
})).toBeNull();
|
171
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
172
|
-
if (headerName ===
|
173
|
-
return
|
189
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
190
|
+
if (headerName === "Content-Disposition") {
|
191
|
+
return "";
|
174
192
|
}
|
193
|
+
|
194
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
175
195
|
})).toBeNull();
|
176
196
|
});
|
177
|
-
it(
|
178
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
179
|
-
if (headerName ===
|
180
|
-
return
|
197
|
+
it("gets the filename from the response header", function () {
|
198
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
199
|
+
if (headerName === "Content-Disposition") {
|
200
|
+
return "inline";
|
181
201
|
}
|
202
|
+
|
203
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
182
204
|
})).toBeNull();
|
183
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
184
|
-
if (headerName ===
|
185
|
-
return
|
205
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
206
|
+
if (headerName === "Content-Disposition") {
|
207
|
+
return "attachment";
|
186
208
|
}
|
209
|
+
|
210
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
187
211
|
})).toBeNull();
|
188
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
189
|
-
if (headerName ===
|
212
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
213
|
+
if (headerName === "Content-Disposition") {
|
190
214
|
return 'attachment; filename="filename.pdf"';
|
191
215
|
}
|
192
|
-
|
193
|
-
|
194
|
-
|
216
|
+
|
217
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
218
|
+
})).toEqual("filename.pdf");
|
219
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
220
|
+
if (headerName === "Content-Disposition") {
|
195
221
|
return 'attachment; filename="filename.pdf and spaces.pdf"';
|
196
222
|
}
|
197
|
-
|
198
|
-
|
199
|
-
|
223
|
+
|
224
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
225
|
+
})).toEqual("filename.pdf and spaces.pdf");
|
226
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
227
|
+
if (headerName === "Content-Disposition") {
|
200
228
|
return 'attachment; filename="tl;dr.pdf"';
|
201
229
|
}
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
230
|
+
|
231
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
232
|
+
})).toEqual("tl;dr.pdf");
|
233
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
234
|
+
if (headerName === "Content-Disposition") {
|
235
|
+
return "attachment; filename=filename.pdf";
|
206
236
|
}
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
237
|
+
|
238
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
239
|
+
})).toEqual("filename.pdf");
|
240
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
241
|
+
if (headerName === "Content-Disposition") {
|
242
|
+
return "attachment; filename=filename.pdf someotherparam";
|
243
|
+
}
|
244
|
+
|
245
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
246
|
+
})).toEqual("filename.pdf");
|
247
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
248
|
+
if (headerName === "Content-Disposition") {
|
249
|
+
return 'attachment; filename="%e4%b8%ad%e6%96%87.pdf"';
|
211
250
|
}
|
212
|
-
|
251
|
+
|
252
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
253
|
+
})).toEqual("中文.pdf");
|
254
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
255
|
+
if (headerName === "Content-Disposition") {
|
256
|
+
return 'attachment; filename="100%.pdf"';
|
257
|
+
}
|
258
|
+
|
259
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
260
|
+
})).toEqual("100%.pdf");
|
213
261
|
});
|
214
|
-
it(
|
215
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
216
|
-
if (headerName ===
|
217
|
-
return
|
262
|
+
it("gets the filename from the response header (RFC 6266)", function () {
|
263
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
264
|
+
if (headerName === "Content-Disposition") {
|
265
|
+
return "attachment; filename*=filename.pdf";
|
218
266
|
}
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
267
|
+
|
268
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
269
|
+
})).toEqual("filename.pdf");
|
270
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
271
|
+
if (headerName === "Content-Disposition") {
|
272
|
+
return "attachment; filename*=''filename.pdf";
|
223
273
|
}
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
274
|
+
|
275
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
276
|
+
})).toEqual("filename.pdf");
|
277
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
278
|
+
if (headerName === "Content-Disposition") {
|
279
|
+
return "attachment; filename*=utf-8''filename.pdf";
|
228
280
|
}
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
281
|
+
|
282
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
283
|
+
})).toEqual("filename.pdf");
|
284
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
285
|
+
if (headerName === "Content-Disposition") {
|
286
|
+
return "attachment; filename=no.pdf; filename*=utf-8''filename.pdf";
|
233
287
|
}
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
288
|
+
|
289
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
290
|
+
})).toEqual("filename.pdf");
|
291
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
292
|
+
if (headerName === "Content-Disposition") {
|
293
|
+
return "attachment; filename*=utf-8''filename.pdf; filename=no.pdf";
|
238
294
|
}
|
239
|
-
|
295
|
+
|
296
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
297
|
+
})).toEqual("filename.pdf");
|
240
298
|
});
|
241
|
-
it(
|
242
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
243
|
-
if (headerName ===
|
244
|
-
return
|
299
|
+
it("gets the filename from the response header (RFC 2231)", function () {
|
300
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
301
|
+
if (headerName === "Content-Disposition") {
|
302
|
+
return "attachment; filename*0=filename; filename*1=.pdf";
|
245
303
|
}
|
246
|
-
|
304
|
+
|
305
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
306
|
+
})).toEqual("filename.pdf");
|
247
307
|
});
|
248
|
-
it(
|
249
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
250
|
-
if (headerName ===
|
308
|
+
it("only extracts filename with pdf extension", function () {
|
309
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
310
|
+
if (headerName === "Content-Disposition") {
|
251
311
|
return 'attachment; filename="filename.png"';
|
252
312
|
}
|
313
|
+
|
314
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
253
315
|
})).toBeNull();
|
254
316
|
});
|
255
|
-
it(
|
256
|
-
expect((0, _network_utils.extractFilenameFromHeader)(
|
257
|
-
if (headerName ===
|
317
|
+
it("extension validation is case insensitive", function () {
|
318
|
+
expect((0, _network_utils.extractFilenameFromHeader)(headerName => {
|
319
|
+
if (headerName === "Content-Disposition") {
|
258
320
|
return 'form-data; name="fieldName"; filename="file.PdF"';
|
259
321
|
}
|
260
|
-
|
322
|
+
|
323
|
+
throw new Error(`Unexpected headerName: ${headerName}`);
|
324
|
+
})).toEqual("file.PdF");
|
261
325
|
});
|
262
326
|
});
|
263
|
-
describe(
|
264
|
-
it(
|
265
|
-
expect((0, _network_utils.createResponseStatusError)(404,
|
266
|
-
expect((0, _network_utils.createResponseStatusError)(0,
|
327
|
+
describe("createResponseStatusError", function () {
|
328
|
+
it("handles missing PDF file responses", function () {
|
329
|
+
expect((0, _network_utils.createResponseStatusError)(404, "https://foo.com/bar.pdf")).toEqual(new _util.MissingPDFException('Missing PDF "https://foo.com/bar.pdf".'));
|
330
|
+
expect((0, _network_utils.createResponseStatusError)(0, "file://foo.pdf")).toEqual(new _util.MissingPDFException('Missing PDF "file://foo.pdf".'));
|
267
331
|
});
|
268
|
-
it(
|
269
|
-
expect((0, _network_utils.createResponseStatusError)(302,
|
270
|
-
expect((0, _network_utils.createResponseStatusError)(0,
|
332
|
+
it("handles unexpected responses", function () {
|
333
|
+
expect((0, _network_utils.createResponseStatusError)(302, "https://foo.com/bar.pdf")).toEqual(new _util.UnexpectedResponseException("Unexpected server response (302) while retrieving PDF " + '"https://foo.com/bar.pdf".'));
|
334
|
+
expect((0, _network_utils.createResponseStatusError)(0, "https://foo.com/bar.pdf")).toEqual(new _util.UnexpectedResponseException("Unexpected server response (0) while retrieving PDF " + '"https://foo.com/bar.pdf".'));
|
271
335
|
});
|
272
336
|
});
|
273
|
-
describe(
|
274
|
-
it(
|
337
|
+
describe("validateResponseStatus", function () {
|
338
|
+
it("accepts valid response statuses", function () {
|
275
339
|
expect((0, _network_utils.validateResponseStatus)(200)).toEqual(true);
|
276
340
|
expect((0, _network_utils.validateResponseStatus)(206)).toEqual(true);
|
277
341
|
});
|
278
|
-
it(
|
342
|
+
it("rejects invalid response statuses", function () {
|
279
343
|
expect((0, _network_utils.validateResponseStatus)(302)).toEqual(false);
|
280
344
|
expect((0, _network_utils.validateResponseStatus)(404)).toEqual(false);
|
281
345
|
expect((0, _network_utils.validateResponseStatus)(null)).toEqual(false);
|