| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8" /> |
| <title>window.performance.now should not enable timing attacks</title> |
| <link rel="author" title="W3C" href="http://www.w3.org/" /> |
| <link rel="help" href="http://w3c.github.io/hr-time/#privacy-security"/> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| test(function() { |
| function check_resolutions(times, length) { |
| var end = length - 2; |
| |
| // we compare each value with the following ones |
| for (var i = 0; i < end; i++) { |
| var h1 = times[i]; |
| for (var j = i+1; j < end; j++) { |
| var h2 = times[j]; |
| var diff = h2 - h1; |
| assert_true((diff === 0) || ((diff * 1000) >= 5), |
| "Differences smaller than 5 microseconds: " + diff); |
| } |
| } |
| return true; |
| } |
| |
| var times = new Array(10); |
| var index = 0; |
| var hrt1, hrt2, hrt; |
| |
| // rapid firing of performance.now |
| hrt1 = performance.now(); |
| hrt2 = performance.now(); |
| times[index++] = hrt1; |
| times[index++] = hrt2; |
| |
| // ensure that we get performance.now() to return a different value |
| do { |
| hrt = performance.now(); |
| times[index++] = hrt; |
| } while ((hrt - hrt1) === 0); |
| |
| assert_true(check_resolutions(times, index), 'Difference should be at least 5 microseconds.'); |
| }, 'The recommended minimum resolution of the Performance interface has been set to 5 microseconds'); |
| </script> |
| </head> |
| <body> |
| <h1>Description</h1> |
| <p>The recommended minimum resolution of the Performance interface should be set to 5 microseconds.</p> |
| |
| <div id="log"></div> |
| |
| </body> |
| </html> |