| <!doctype html> |
| <html> |
| <head> |
| <title>XMLHttpRequest: send() - charset parameter of Content-Type</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <div id="log"></div> |
| <script> |
| function request(input, output, title) { |
| title = title || document.title + ' - ' + input; |
| test(function() { |
| var client = new XMLHttpRequest() |
| client.open("POST", "resources/content.py", false) |
| if(input !== null) |
| client.setRequestHeader("Content-Type", input) |
| client.send("TEST") |
| assert_equals(client.responseText, "TEST") |
| assert_equals(client.getResponseHeader("x-request-content-type"), output) |
| }, title) |
| } |
| |
| request( |
| "text; charset=ascii", |
| "text; charset=ascii", |
| "header with invalid MIME type is not changed" |
| ) |
| request( |
| "", |
| "", |
| "header with invalid MIME type (empty string) is not changed" |
| ) |
| request( |
| "charset=ascii", |
| "charset=ascii", |
| "known charset but bogus header - missing MIME type" |
| ) |
| request( |
| "charset=bogus", |
| "charset=bogus", |
| "bogus charset and bogus header - missing MIME type" |
| ) |
| request( |
| "text/plain;charset=utf-8", |
| "text/plain;charset=utf-8", |
| "If charset= param is UTF-8 (case-insensitive), it should not be changed" |
| ) |
| request( |
| "text/x-pink-unicorn", |
| "text/x-pink-unicorn", |
| "If no charset= param is given, implementation should not add one - unknown MIME" |
| ) |
| request( |
| "text/plain", |
| "text/plain", |
| "If no charset= param is given, implementation should not add one - known MIME" |
| ) |
| request( |
| "text/plain; hi=bye", |
| "text/plain; hi=bye", |
| "If no charset= param is given, implementation should not add one - known MIME, unknown param, two spaces" |
| ) |
| request( |
| "text/x-thepiano;charset= waddup", |
| "text/x-thepiano;charset=UTF-8", |
| "charset given but wrong, fix it (unknown MIME, bogus charset)" |
| ) |
| request( |
| "text/plain;charset=utf-8;charset=waddup", |
| "text/plain;charset=utf-8;charset=waddup", |
| "If charset= param is UTF-8 (case-insensitive), it should not be changed (bogus charset)" |
| ) |
| request( |
| "text/plain;charset=shift-jis", |
| "text/plain;charset=UTF-8", |
| "charset given but wrong, fix it (known MIME, actual charset)" |
| ) |
| request( |
| "text/x-pink-unicorn; charset=windows-1252; charset=bogus; notrelated; charset=ascii", |
| "text/x-pink-unicorn;charset=UTF-8", |
| "Multiple non-UTF-8 charset parameters deduplicate, bogus parameter dropped" |
| ) |
| request( |
| null, |
| "text/plain;charset=UTF-8", |
| "No content type set, give MIME and charset" |
| ) |
| request( |
| "text/plain;charset= utf-8", |
| "text/plain;charset=UTF-8", |
| "charset with leading space that is UTF-8 does change") |
| request( |
| "text/plain;charset=utf-8 ;x=x", |
| "text/plain;charset=utf-8 ;x=x", |
| "charset with trailing space that is UTF-8 does not change"); |
| request( |
| "text/plain;charset=\"utf-8\"", |
| "text/plain;charset=\"utf-8\"", |
| "charset in double quotes that is UTF-8 does not change") |
| request( |
| "text/plain;charset=\" utf-8\"", |
| "text/plain;charset=UTF-8", |
| "charset in double quotes with space") |
| request( |
| "text/plain;charset=\"u\\t\\f-8\"", |
| "text/plain;charset=\"u\\t\\f-8\"", |
| "charset in double quotes with backslashes that is UTF-8 does not change") |
| request( |
| "YO/yo;charset=x;yo=YO; X=y", |
| "yo/yo;charset=UTF-8;yo=YO;x=y", |
| "unknown parameters need to be preserved") |
| </script> |
| </body> |
| </html> |