-
Notifications
You must be signed in to change notification settings - Fork 3.1k
/
header-content-type.html
85 lines (75 loc) · 2.77 KB
/
header-content-type.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>SendBeacon Content-Type header</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
</head>
<body>
<script src="/common/utils.js"></script>
<script src="/common/get-host-info.sub.js"></script>
<script>
const RESOURCES_DIR = "/beacon/resources/";
function testContentTypeHeader(what, contentType, title) {
function wait(ms) {
return new Promise(resolve => step_timeout(resolve, ms));
}
promise_test(async t => {
const id = self.token();
const testUrl = new Request(RESOURCES_DIR + "content-type.py?cmd=put&id=" + id).url;
assert_true(navigator.sendBeacon(testUrl, what), "SendBeacon Succeeded");
assert_equals(performance.getEntriesByName(testUrl).length, 0);
do {
await wait(50);
} while (performance.getEntriesByName(testUrl).length === 0);
assert_equals(performance.getEntriesByName(testUrl).length, 1);
const checkUrl = RESOURCES_DIR + "content-type.py?cmd=get&id=" + id;
const response = await fetch(checkUrl);
const text = await response.text();
if (contentType === "multipart/form-data") {
assert_true(text.startsWith(contentType), "Correct Content-Type header result");
} else {
assert_equals(text, contentType, "Correct Content-Type header result");
}
}, "Test content-type header for a body " + title);
}
function stringToArrayBufferView(input) {
var buffer = new ArrayBuffer(input.length * 2);
var view = new Uint16Array(buffer);
// dumbly copy over the bytes
for (var i = 0, len = input.length; i < len; i++) {
view[i] = input.charCodeAt(i);
}
return view;
}
function stringToArrayBuffer(input) {
var buffer = new ArrayBuffer(input.length * 2);
var view = new Uint16Array(buffer);
// dumbly copy over the bytes
for (var i = 0, len = input.length; i < len; i++) {
view[i] = input.charCodeAt(i);
}
return buffer;
}
function stringToBlob(input) {
return new Blob([input], {type: "text/plain"});
}
function stringToFormData(input) {
var formdata = new FormData();
formdata.append(input, new Blob(['hi']));
return formdata;
}
function stringToURLSearchParams(input)
{
return new URLSearchParams(input);
}
testContentTypeHeader("hi!", "text/plain;charset=UTF-8", "string");
testContentTypeHeader(stringToArrayBufferView("123"), "", "ArrayBufferView");
testContentTypeHeader(stringToArrayBuffer("123"), "", "ArrayBuffer");
testContentTypeHeader(stringToBlob("123"), "text/plain", "Blob");
testContentTypeHeader(stringToFormData("qwerty"), "multipart/form-data", "FormData");
testContentTypeHeader(stringToURLSearchParams("key1=value1&key2=value2"), "application/x-www-form-urlencoded;charset=UTF-8", "URLSearchParams");
</script>
</body>
</html>