|  | <!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> |