test_navigator_workers_hardwareConcurrency.html (1853B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Test for Navigator.hardwareConcurrency</title> 6 <script src="/tests/SimpleTest/SimpleTest.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 8 <script type="application/javascript"> 9 "use strict"; 10 11 SimpleTest.waitForExplicitFinish(); 12 13 function getWorkerHardwareConcurrency(onmessage) { 14 var script = "postMessage(navigator.hardwareConcurrency)"; 15 var url = URL.createObjectURL(new Blob([script])); 16 var w = new Worker(url); 17 w.onmessage = onmessage; 18 } 19 20 function resistFingerprinting(value) { 21 var sp = SpecialPowers; 22 ok(sp != null, "SpecialPowers loaded."); 23 return sp.pushPrefEnv({"set": [["privacy.resistFingerprinting", value]]}); 24 } 25 26 getWorkerHardwareConcurrency(e => { 27 var x = e.data; 28 is(typeof x, "number", "hardwareConcurrency should be a number."); 29 ok(x > 0, "hardwareConcurrency should be greater than 0."); 30 31 resistFingerprinting(true).then(() => { 32 ok(true, "resistFingerprinting(true) resolved."); 33 getWorkerHardwareConcurrency(msg => { 34 const expected = SpecialPowers.Services.appinfo.OS == "Darwin" ? 8 : 4; 35 const y = msg.data; 36 ok(y === expected, "hardwareConcurrency should always be 2 when we're resisting fingerprinting."); 37 38 resistFingerprinting(false).then(() => { 39 ok(true, "resistFingerprinting(false) resolved."); 40 getWorkerHardwareConcurrency(msg1 => { 41 const z = msg1.data; 42 ok(z === x, "hardwareConcurrency should be the same as before we were resisting fingerprinting."); 43 44 SimpleTest.finish(); 45 }); 46 }); 47 }); 48 }); 49 }); 50 51 </script> 52 </head> 53 <body> 54 <p id="display"></p> 55 <div id="content" style="display: none"> 56 57 </div> 58 <pre id="test"> 59 </pre> 60 </body> 61 </html>