| // META: global=dedicatedworker,sharedworker |
| // |
| // Tests for https://github.com/whatwg/html/issues/8869 |
| |
| importScripts("/resources/testharness.js"); |
| |
| let test_cases = [ |
| // Supported mimetypes: |
| ["text/javascript", true], |
| ["application/javascript", true], |
| ["text/ecmascript", true], |
| |
| // Blocked mimetpyes: |
| ["image/png", false], |
| ["text/csv", false], |
| ["video/mpeg", false], |
| |
| // Legacy mimetypes: |
| ["text/html", false], |
| ["text/plain", false], |
| ["application/xml", false], |
| ["application/octet-stream", false], |
| |
| // Potato mimetypes: |
| ["text/potato", false], |
| ["potato/text", false], |
| ["aaa/aaa", false], |
| ["zzz/zzz", false], |
| |
| // Parameterized mime types: |
| ["text/javascript; charset=utf-8", true], |
| ["text/javascript;charset=utf-8", true], |
| ["text/javascript;bla;bla", true], |
| ["text/csv; charset=utf-8", false], |
| ["text/csv;charset=utf-8", false], |
| ["text/csv;bla;bla", false], |
| |
| // Funky capitalization: |
| ["Text/html", false], |
| ["text/Html", false], |
| ["TeXt/HtMl", false], |
| ["TEXT/HTML", false], |
| ]; |
| |
| for (const [mimeType, isScriptType] of test_cases) { |
| test(t => { |
| let import_url = `data:${ mimeType },`; |
| if (isScriptType) { |
| assert_equals(undefined, importScripts(import_url)); |
| } else { |
| assert_throws_dom("NetworkError", _ => { importScripts(import_url) }) |
| } |
| }, "importScripts() requires scripty MIME types for data: URLs: " + mimeType + " is " + (isScriptType ? "allowed" : "blocked") + "."); |
| } |
| |
| for (const [mimeType, isScriptType] of test_cases) { |
| test(t => { |
| let import_url = URL.createObjectURL(new Blob([""], { type: mimeType })); |
| if (isScriptType) { |
| assert_equals(undefined, importScripts(import_url)); |
| } else { |
| assert_throws_dom("NetworkError", _ => { importScripts(import_url) }) |
| } |
| }, "importScripts() requires scripty MIME types for blob: URLs: " + mimeType + " is " + (isScriptType ? "allowed" : "blocked") + "."); |
| } |
| done(); |