Skip to content

Commit 54c8915

Browse files
Benjamin C. Wiley Sittlerchromium-wpt-export-bot
authored andcommitted
WPT: Add form-based file upload coverage
Tests multipart form POSTs with file inputs where the selected "file" was constructed using the `File` constructor and added to a `DataTransferItemList` (this avoids the user gesture requirement which otherwise would consign this to manual testing.) For the non-ASCII filenames with non-UTF-8 accept-charsets this also verifies fallback encoding/replacement of unrepresentable characters using numeric character references. whatwg/html#2861 Coverage for fallback encoding is still tentative because filename fallback encoding is not yet standardized. whatwg/html#3223 Bug: 661819 Change-Id: Ic646f76b0c8a0792d1214a7848d2238bcc3a76e7 Reviewed-on: https://chromium-review.googlesource.com/811625 Reviewed-by: Victor Costan <[email protected]> Reviewed-by: Joshua Bell <[email protected]> Commit-Queue: Benjamin Wiley Sittler <[email protected]> Cr-Commit-Position: refs/heads/master@{#522197}
1 parent fee40e5 commit 54c8915

File tree

6 files changed

+546
-0
lines changed

6 files changed

+546
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<!DOCTYPE html>
2+
<meta charset="utf-8">
3+
<title>Upload files in ISO-2022-JP form (tentative)</title>
4+
<!--
5+
NOTE: This test is tentative because encoding for filename
6+
characters unrepresentable in the form charset is not yet
7+
standardized.
8+
-->
9+
<link rel="help"
10+
href="https://github.com/whatwg/html/issues/3223">
11+
<link rel="help"
12+
href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data">
13+
<link rel="help"
14+
href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist">
15+
<link rel="help"
16+
href="https://w3c.github.io/FileAPI/#file-constructor">
17+
<link rel="author" title="Benjamin C. Wiley Sittler"
18+
href="mailto:[email protected]">
19+
<script src="/resources/testharness.js"></script>
20+
<script src="/resources/testharnessreport.js"></script>
21+
<script src="../support/send-file-form-helper.js"></script>
22+
<script>
23+
'use strict';
24+
25+
formPostFileUploadTest({
26+
fileNameSource: 'ASCII',
27+
fileBaseName: 'file-for-upload-in-form.txt',
28+
formEncoding: 'ISO-2022-JP',
29+
expectedEncodedBaseName: 'file-for-upload-in-form.txt',
30+
});
31+
32+
formPostFileUploadTest({
33+
fileNameSource: 'x-user-defined',
34+
fileBaseName: 'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt',
35+
formEncoding: 'ISO-2022-JP',
36+
expectedEncodedBaseName: (
37+
'file-for-upload-in-form-&#63472;&#63379;&#63363;&#63392;.txt'),
38+
});
39+
40+
formPostFileUploadTest({
41+
fileNameSource: 'windows-1252',
42+
fileBaseName: 'file-for-upload-in-form-☺😂.txt',
43+
formEncoding: 'ISO-2022-JP',
44+
expectedEncodedBaseName: (
45+
'file-for-upload-in-form-&#226;&#732;&#186;&#240;&#376;&#732;&#8218;.txt'),
46+
});
47+
48+
formPostFileUploadTest({
49+
fileNameSource: 'JIS X 0201 and JIS X 0208',
50+
fileBaseName: 'file-for-upload-in-form-★星★.txt',
51+
formEncoding: 'ISO-2022-JP',
52+
expectedEncodedBaseName: 'file-for-upload-in-form-\x1B$B!z@1!z\x1B(B.txt',
53+
});
54+
55+
formPostFileUploadTest({
56+
fileNameSource: 'Unicode',
57+
fileBaseName: 'file-for-upload-in-form-☺😂.txt',
58+
formEncoding: 'ISO-2022-JP',
59+
expectedEncodedBaseName: 'file-for-upload-in-form-&#9786;&#128514;.txt',
60+
});
61+
62+
formPostFileUploadTest({
63+
fileNameSource: 'Unicode',
64+
fileBaseName: `file-for-upload-in-form-${kTestChars}.txt`,
65+
formEncoding: 'ISO-2022-JP',
66+
expectedEncodedBaseName: `file-for-upload-in-form-${
67+
kTestFallbackIso2022jp
68+
}.txt`,
69+
});
70+
71+
</script>
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<!DOCTYPE html>
2+
<meta charset="utf-8">
3+
<title>Upload files in UTF-8 form</title>
4+
<link rel="help"
5+
href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data">
6+
<link rel="help"
7+
href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist">
8+
<link rel="help"
9+
href="https://w3c.github.io/FileAPI/#file-constructor">
10+
<link rel="author" title="Benjamin C. Wiley Sittler"
11+
href="mailto:[email protected]">
12+
<script src="/resources/testharness.js"></script>
13+
<script src="/resources/testharnessreport.js"></script>
14+
<script src="../support/send-file-form-helper.js"></script>
15+
<script>
16+
'use strict';
17+
18+
formPostFileUploadTest({
19+
fileNameSource: 'ASCII',
20+
fileBaseName: 'file-for-upload-in-form.txt',
21+
formEncoding: 'UTF-8',
22+
expectedEncodedBaseName: 'file-for-upload-in-form.txt',
23+
});
24+
25+
formPostFileUploadTest({
26+
fileNameSource: 'x-user-defined',
27+
fileBaseName: 'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt',
28+
formEncoding: 'UTF-8',
29+
expectedEncodedBaseName: (
30+
'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt'),
31+
});
32+
33+
formPostFileUploadTest({
34+
fileNameSource: 'windows-1252',
35+
fileBaseName: 'file-for-upload-in-form-☺😂.txt',
36+
formEncoding: 'UTF-8',
37+
expectedEncodedBaseName: 'file-for-upload-in-form-☺😂.txt',
38+
});
39+
40+
formPostFileUploadTest({
41+
fileNameSource: 'JIS X 0201 and JIS X 0208',
42+
fileBaseName: 'file-for-upload-in-form-★星★.txt',
43+
formEncoding: 'UTF-8',
44+
expectedEncodedBaseName: 'file-for-upload-in-form-★星★.txt',
45+
});
46+
47+
formPostFileUploadTest({
48+
fileNameSource: 'Unicode',
49+
fileBaseName: 'file-for-upload-in-form-☺😂.txt',
50+
formEncoding: 'UTF-8',
51+
expectedEncodedBaseName: 'file-for-upload-in-form-☺😂.txt',
52+
});
53+
54+
formPostFileUploadTest({
55+
fileNameSource: 'Unicode',
56+
fileBaseName: `file-for-upload-in-form-${kTestChars}.txt`,
57+
formEncoding: 'UTF-8',
58+
expectedEncodedBaseName: `file-for-upload-in-form-${kTestChars}.txt`,
59+
});
60+
61+
</script>
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<!DOCTYPE html>
2+
<meta charset="utf-8">
3+
<title>Upload files in Windows-1252 form (tentative)</title>
4+
<!--
5+
NOTE: This test is tentative because encoding for filename
6+
characters unrepresentable in the form charset is not yet
7+
standardized.
8+
-->
9+
<link rel="help"
10+
href="https://github.com/whatwg/html/issues/3223">
11+
<link rel="help"
12+
href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data">
13+
<link rel="help"
14+
href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist">
15+
<link rel="help"
16+
href="https://w3c.github.io/FileAPI/#file-constructor">
17+
<link rel="author" title="Benjamin C. Wiley Sittler"
18+
href="mailto:[email protected]">
19+
<script src="/resources/testharness.js"></script>
20+
<script src="/resources/testharnessreport.js"></script>
21+
<script src="../support/send-file-form-helper.js"></script>
22+
<script>
23+
'use strict';
24+
25+
formPostFileUploadTest({
26+
fileNameSource: 'ASCII',
27+
fileBaseName: 'file-for-upload-in-form.txt',
28+
formEncoding: 'windows-1252',
29+
expectedEncodedBaseName: 'file-for-upload-in-form.txt',
30+
});
31+
32+
formPostFileUploadTest({
33+
fileNameSource: 'x-user-defined',
34+
fileBaseName: 'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt',
35+
formEncoding: 'windows-1252',
36+
expectedEncodedBaseName: (
37+
'file-for-upload-in-form-&#63472;&#63379;&#63363;&#63392;.txt'),
38+
});
39+
40+
formPostFileUploadTest({
41+
fileNameSource: 'windows-1252',
42+
fileBaseName: 'file-for-upload-in-form-☺😂.txt',
43+
formEncoding: 'windows-1252',
44+
expectedEncodedBaseName: 'file-for-upload-in-form-☺😂.txt',
45+
});
46+
47+
formPostFileUploadTest({
48+
fileNameSource: 'JIS X 0201 and JIS X 0208',
49+
fileBaseName: 'file-for-upload-in-form-★星★.txt',
50+
formEncoding: 'windows-1252',
51+
expectedEncodedBaseName: 'file-for-upload-in-form-&#9733;&#26143;&#9733;.txt',
52+
});
53+
54+
formPostFileUploadTest({
55+
fileNameSource: 'Unicode',
56+
fileBaseName: 'file-for-upload-in-form-☺😂.txt',
57+
formEncoding: 'windows-1252',
58+
expectedEncodedBaseName: 'file-for-upload-in-form-&#9786;&#128514;.txt',
59+
});
60+
61+
formPostFileUploadTest({
62+
fileNameSource: 'Unicode',
63+
fileBaseName: `file-for-upload-in-form-${kTestChars}.txt`,
64+
formEncoding: 'windows-1252',
65+
expectedEncodedBaseName: `file-for-upload-in-form-${
66+
kTestFallbackWindows1252
67+
}.txt`,
68+
});
69+
70+
</script>
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<!DOCTYPE html>
2+
<meta charset="utf-8">
3+
<title>Upload files in x-user-defined form (tentative)</title>
4+
<!--
5+
NOTE: This test is tentative because encoding for filename
6+
characters unrepresentable in the form charset is not yet
7+
standardized.
8+
-->
9+
<link rel="help"
10+
href="https://github.com/whatwg/html/issues/3223">
11+
<link rel="help"
12+
href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data">
13+
<link rel="help"
14+
href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist">
15+
<link rel="help"
16+
href="https://w3c.github.io/FileAPI/#file-constructor">
17+
<link rel="author" title="Benjamin C. Wiley Sittler"
18+
href="mailto:[email protected]">
19+
<script src="/resources/testharness.js"></script>
20+
<script src="/resources/testharnessreport.js"></script>
21+
<script src="../support/send-file-form-helper.js"></script>
22+
<script>
23+
'use strict';
24+
25+
formPostFileUploadTest({
26+
fileNameSource: 'ASCII',
27+
fileBaseName: 'file-for-upload-in-form.txt',
28+
formEncoding: 'x-user-defined',
29+
expectedEncodedBaseName: 'file-for-upload-in-form.txt',
30+
});
31+
32+
formPostFileUploadTest({
33+
fileNameSource: 'x-user-defined',
34+
fileBaseName: 'file-for-upload-in-form-\uF7F0\uF793\uF783\uF7A0.txt',
35+
formEncoding: 'x-user-defined',
36+
expectedEncodedBaseName: 'file-for-upload-in-form-𓃠.txt',
37+
});
38+
39+
formPostFileUploadTest({
40+
fileNameSource: 'windows-1252',
41+
fileBaseName: 'file-for-upload-in-form-☺😂.txt',
42+
formEncoding: 'x-user-defined',
43+
expectedEncodedBaseName: ('file-for-upload-in-form-' +
44+
'&#226;&#732;&#186;&#240;&#376;&#732;&#8218;.txt'),
45+
});
46+
47+
formPostFileUploadTest({
48+
fileNameSource: 'JIS X 0201 and JIS X 0208',
49+
fileBaseName: 'file-for-upload-in-form-★星★.txt',
50+
formEncoding: 'x-user-defined',
51+
expectedEncodedBaseName: 'file-for-upload-in-form-&#9733;&#26143;&#9733;.txt',
52+
});
53+
54+
formPostFileUploadTest({
55+
fileNameSource: 'Unicode',
56+
fileBaseName: 'file-for-upload-in-form-☺😂.txt',
57+
formEncoding: 'x-user-defined',
58+
expectedEncodedBaseName: 'file-for-upload-in-form-&#9786;&#128514;.txt',
59+
});
60+
61+
formPostFileUploadTest({
62+
fileNameSource: 'Unicode',
63+
fileBaseName: `file-for-upload-in-form-${kTestChars}.txt`,
64+
formEncoding: 'x-user-defined',
65+
expectedEncodedBaseName: `file-for-upload-in-form-${
66+
kTestFallbackXUserDefined
67+
}.txt`,
68+
});
69+
70+
</script>

FileAPI/file/send-file-form.html

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<!DOCTYPE html>
2+
<meta charset="utf-8">
3+
<title>Upload ASCII-named file in UTF-8 form</title>
4+
<link rel="help"
5+
href="https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data">
6+
<link rel="help"
7+
href="https://html.spec.whatwg.org/multipage/dnd.html#datatransferitemlist">
8+
<link rel="help"
9+
href="https://w3c.github.io/FileAPI/#file-constructor">
10+
<link rel="author" title="Benjamin C. Wiley Sittler"
11+
href="mailto:[email protected]">
12+
<script src="/resources/testharness.js"></script>
13+
<script src="/resources/testharnessreport.js"></script>
14+
<script src="../support/send-file-form-helper.js"></script>
15+
<script>
16+
'use strict';
17+
18+
formPostFileUploadTest({
19+
fileNameSource: 'ASCII',
20+
fileBaseName: 'file-for-upload-in-form.txt',
21+
formEncoding: 'UTF-8',
22+
expectedEncodedBaseName: 'file-for-upload-in-form.txt',
23+
});
24+
25+
</script>

0 commit comments

Comments
 (0)