source-file.html (3040B)
1 <meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script';" /> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script> 5 6 const policy = trustedTypes.createPolicy("sample", {createScript: x => x}); 7 8 // Check CSP violated by a script originating from |input| returns a CSP 9 // violation whose sourceFile is |output|. 10 const testSourceFile = (description, input, output) => { 11 promise_test(async test => { 12 // Listen for TrustedType violation. 13 const violation = new Promise(resolve => { 14 document.addEventListener("securitypolicyviolation", e => { 15 resolve(e); 16 }, {once: true}); 17 }); 18 19 // A trusted script using a customized sourceURL. The script's execution 20 // itself will trigger a TrustedType violation. 21 const trusted_script = policy.createScript(` 22 eval(''); 23 //# sourceURL=${input} 24 `) 25 assert_throws_js(EvalError, _ => eval(trusted_script)); 26 assert_equals((await violation).sourceFile, output); 27 }, description); 28 }; 29 30 testSourceFile("Basic HTTPS URL", 31 "http://dummy.test/script1.js", 32 "http://dummy.test/script1.js"); 33 34 testSourceFile("Basic HTTP URL", 35 "https://dummy.test/script1.js", 36 "https://dummy.test/script1.js"); 37 38 testSourceFile("Basic WSS URL", 39 "wss://dummy.test/script1.js", 40 "wss://dummy.test/script1.js"); 41 42 testSourceFile("Basic WS URL", 43 "ws://dummy.test/script1.js", 44 "ws://dummy.test/script1.js"); 45 46 testSourceFile("Fragment", 47 "https://dummy.test/script1.js#frag", 48 "https://dummy.test/script1.js"); 49 50 testSourceFile("Query", 51 "https://dummy.test/script1.js?query", 52 "https://dummy.test/script1.js"); 53 54 testSourceFile("Port", 55 "https://dummy.test:8080/script1.js", 56 "https://dummy.test:8080/script1.js"); 57 58 testSourceFile("User:password", 59 "https://user:password@dummy.test/script1.js", 60 "https://dummy.test/script1.js"); 61 62 testSourceFile("User", 63 "https://user@dummy.test/script1.js", 64 "https://dummy.test/script1.js"); 65 66 testSourceFile("Invalid URL", 67 "script2.js", 68 ""); 69 70 testSourceFile("file:", 71 "file:///temp/script3.js", 72 "file"); 73 74 testSourceFile("Custom protocol", 75 "webpack://node_modules/sample/script4.js", 76 "webpack"); 77 78 testSourceFile("about:blank", 79 "about:blank", 80 "about"); 81 82 testSourceFile("about:custom", 83 "about:custom", 84 "about"); 85 86 testSourceFile("data:", 87 "data:text/html;charset=utf8,<html></html>", 88 "data"); 89 90 testSourceFile("blob:", 91 "blob:http://test.test/012345-6789-abcd-efab-0123456789", 92 "blob"); 93 94 testSourceFile("javascript:", 95 "javascript:void(0)", 96 "javascript"); 97 98 </script>