| <!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_equals(performance.getEntriesByName(testUrl).length, 0); |
| assert_true(navigator.sendBeacon(testUrl, what), "SendBeacon Succeeded"); |
| |
| 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> |