| <!DOCTYPE html> |
| <html> |
| |
| <head> |
| <!-- Programmatically converted from a WebKit Reftest, please forgive resulting idiosyncracies.--> |
| <title>scripthash-unicode-normalization</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| |
| </script> |
| <!-- enforcing policy: |
| script-src 'self' 'nonce-nonceynonce' 'sha256-dWTP4Di8KBjaiXvQ5mRquI9OoBSo921ahYxLfYSiuT8='; connect-src 'self'; |
| --> |
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
| </head> |
| |
| <body> |
| <!-- The following two scripts contain two separate code points (U+00C5 |
| and U+212B, respectively) which, depending on your text editor, might be |
| rendered the same.However, their difference is important because, under |
| NFC normalization, they would become the same code point, which would be |
| against the spec. This test, therefore, validates that the scripts have |
| *different* hash values. --> |
| <script nonce="nonceynonce"> |
| var matchingContent = 'Å'; |
| var nonMatchingContent = 'Å'; |
| |
| // This script should have a hash value of |
| // sha256-9UFeeZbvnMa0tLNu76v96T4Hh+UtDWHm2lPQJoTWb9c= |
| var scriptContent1 = "window.finish('" + matchingContent + "');"; |
| |
| // This script should have a hash value of |
| // sha256-iNjjXUXds31FFvkAmbC74Sxnvreug3PzGtu16udQyqM= |
| var scriptContent2 = "window.finish('" + nonMatchingContent + "');"; |
| |
| var script1 = document.createElement('script'); |
| script1.innerHTML = scriptContent1; |
| var script2 = document.createElement('script'); |
| script2.innerHTML = scriptContent2; |
| |
| script1.test = async_test("Inline script with hash in CSP"); |
| script2.test = async_test("Inline script without hash in CSP"); |
| |
| var failure = function() { |
| assert_unreached(); |
| } |
| |
| window.finish = function(content) { |
| if (content == matchingContent) { |
| script1.test.step(function() { |
| script1.test.done(); |
| }); |
| } else { |
| assert_unreached(); |
| } |
| } |
| |
| script1.onerror = failure; |
| script2.onerror = script2.test.step_func(function() { |
| script2.test.done(); |
| }); |
| document.body.appendChild(script1); |
| document.body.appendChild(script2); |
| </script> |
| |
| <p> |
| This tests Unicode normalization. While appearing the same, the strings in the scripts are different Unicode points, but through normalization, should be the same when the hash is taken. |
| </p> |
| <div id="log"></div> |
| <script async defer src="../support/checkReport.sub.js?reportExists=true"></script> |
| </body> |
| |
| </html> |