summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/mimesniff/mime-types/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/mimesniff/mime-types/README.md')
-rw-r--r--testing/web-platform/tests/mimesniff/mime-types/README.md47
1 files changed, 47 insertions, 0 deletions
diff --git a/testing/web-platform/tests/mimesniff/mime-types/README.md b/testing/web-platform/tests/mimesniff/mime-types/README.md
new file mode 100644
index 0000000000..eb5fba0ef0
--- /dev/null
+++ b/testing/web-platform/tests/mimesniff/mime-types/README.md
@@ -0,0 +1,47 @@
+## MIME types
+
+`resources/mime-types.json` and `resources/generated-mime-types.json` contain MIME type tests. The tests are encoded as a JSON array. String values in the array serve as documentation. All other values are objects with the following fields:
+
+* `input`: The string to be parsed.
+* `output`: Null if parsing resulted in failure and the MIME type record serialized as string otherwise.
+* `navigable`: True if the MIME type can be used for a document to be loaded in a browsing context (i.e., does not result in a download) and omitted otherwise.
+* `encoding`: The encoding that can be extracted from the MIME type or null if no encoding can be extracted, and omitted otherwise.
+
+Note: the object description implies that there tests without `navigable` or `encoding` set.
+
+A wrapper for these JSON MIME type tests needs to take care that not all `input` values can be tested in all entrypoints. Some entrypoints only accept bytes and some have further restrictions. A function such as the one below can be used to differentiate:
+
+```js
+function isByteCompatible(str) {
+ // see https://fetch.spec.whatwg.org/#concept-header-value-normalize
+ if(/^[\u0009\u0020\u000A\u000D]+|[\u0009\u0020\u000A\u000D]+$/.test(str)) {
+ return "header-value-incompatible";
+ }
+
+ for(let i = 0; i < str.length; i++) {
+ const charCode = str.charCodeAt(i);
+ // See https://fetch.spec.whatwg.org/#concept-header-value
+ if(charCode > 0xFF) {
+ return "incompatible";
+ } else if(charCode === 0x00 || charCode === 0x0A || charCode === 0x0D) {
+ return "header-value-incompatible";
+ }
+ }
+ return "compatible";
+}
+```
+
+`resources/generated-mime-types.json` is generated by running `resources/generated-mime-types.py`. Modify the latter to correct the former.
+
+These tests are used by resources in this directory to test various aspects of MIME types.
+
+## MIME type groups
+
+`resources/mime-groups.json` contains MIME type group-membership tests. The tests are encoded as a JSON array. String values in the array serve as documentation. All other values are objects with the following fields:
+
+* `input`: The MIME type to test.
+* `groups`: An array of zero or more groups to which the MIME type belongs.
+
+In order to pass the tests an implementation must treat each MIME type as belonging to the exact set of groups listed, with no additions or omissions.
+
+Note: As MIME type groups are used only while determining the computed MIME type of a resource and are not exposed in any API, no browser-based test harness is available.