tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_backends.html (3776B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <meta charset='UTF-8'>
      5  <script src='/tests/SimpleTest/SimpleTest.js'></script>
      6  <link rel='stylesheet' href='/tests/SimpleTest/test.css'>
      7 </head>
      8 <body>
      9 <script>
     10 
     11 function RunWithPrefs(prefPairList, func) {
     12  var prefEnv = {'set': prefPairList};
     13  try {
     14    SpecialPowers.pushPrefEnv(prefEnv, func);
     15  } catch (e) {
     16    console.log('Warning: Failed to set prefs: ' + JSON.stringify(prefPairList));
     17    func();
     18  }
     19 }
     20 
     21 ////////////////////////////////////////
     22 
     23 var ANGLE_IS_SINGLETON = true;
     24 
     25 var expectD3DType;
     26 try {
     27  // code borrowed from browser/modules/test/browser_taskbar_preview.js
     28  var version = SpecialPowers.Services.sysinfo.getProperty('version');
     29  version = parseFloat(version);
     30 
     31  // Version 6.0 is Vista, 6.1 is 7.
     32  if (version <= 6.0)
     33    expectD3DType = 'd3d9';
     34  else
     35    expectD3DType = 'd3d11';
     36 } catch (e) {
     37  expectD3DType = 'd3d11';
     38 }
     39 
     40 function GetRenderer() {
     41  var c = document.createElement('canvas');
     42  var gl = c.getContext('experimental-webgl');
     43  if (!gl)
     44    return undefined;
     45 
     46  var ext = gl.getExtension('WEBGL_debug_renderer_info');
     47  if (!ext)
     48    throw new Error('Requires WEBGL_debug_renderer_info.');
     49 
     50  var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL);
     51  return renderer;
     52 }
     53 
     54 function GetRendererType() {
     55  var renderer = GetRenderer();
     56  if (renderer === undefined)
     57    return 'none';
     58 
     59  if (renderer.includes('ANGLE')) {
     60    if (renderer.includes('Microsoft Basic Render Driver')) // Also includes 'Direct3D11'.
     61      return 'warp';
     62    if (renderer.includes('Direct3D11'))
     63      return 'd3d11';
     64    if (renderer.includes('Direct3D9'))
     65      return 'd3d9';
     66 
     67  } else {
     68    return 'gl';
     69  }
     70 
     71  throw new Error('Unrecognized renderer type for: ' + renderer);
     72 }
     73 
     74 function TestActualType(testName, expectedType) {
     75  var actualType = GetRendererType();
     76  ok(actualType == expectedType,
     77     '[' + testName + '] Expected ' + expectedType + ', was ' + actualType);
     78 }
     79 
     80 ////////////////////////////////////////
     81 
     82 function TestDefault() {
     83  var expectedType = 'gl';
     84  var isWindows = (navigator.platform.indexOf('Win') == 0);
     85  if (isWindows) {
     86    expectedType = expectD3DType;
     87  }
     88  TestActualType('TestDefault', expectedType);
     89 
     90  if (isWindows && !ANGLE_IS_SINGLETON) {
     91    var prefPairList = [
     92      ['webgl.angle.force-warp', true],
     93    ];
     94    RunWithPrefs(prefPairList, TestWARP);
     95    return;
     96  }
     97 
     98  var prefPairList = [
     99    ['webgl.disabled', true],
    100  ];
    101  RunWithPrefs(prefPairList, TestDisabled);
    102 }
    103 
    104 
    105 function TestWARP() {
    106  var expectedType = (expectD3DType == 'd3d11') ? 'warp' : 'none';
    107  TestActualType('TestWARP', expectedType);
    108 
    109  var prefPairList = [
    110    ['webgl.angle.force-warp', false],
    111    ['webgl.angle.force-d3d11', true],
    112  ];
    113  RunWithPrefs(prefPairList, TestD3D11);
    114 }
    115 
    116 
    117 function TestD3D11() {
    118  var expectedType = (expectD3DType == 'd3d11') ? 'd3d11' : 'none';
    119  TestActualType('TestD3D11', expectedType);
    120 
    121  var prefPairList = [
    122    ['webgl.angle.force-d3d11', false],
    123    ['webgl.angle.try-d3d11', false],
    124  ];
    125  RunWithPrefs(prefPairList, TestD3D9);
    126 }
    127 
    128 
    129 function TestD3D9() {
    130  TestActualType('TestD3D9', 'd3d9');
    131 
    132  var prefPairList = [
    133    ['webgl.angle.try-d3d11', true],
    134    ['webgl.disable-angle', true],
    135  ];
    136  RunWithPrefs(prefPairList, TestWinGL);
    137 }
    138 
    139 
    140 function TestWinGL() {
    141  TestActualType('TestWinGL', 'gl');
    142 
    143  var prefPairList = [
    144    ['webgl.disabled', true],
    145  ];
    146  RunWithPrefs(prefPairList, TestDisabled);
    147 }
    148 
    149 
    150 function TestDisabled() {
    151  TestActualType('TestDisabled', 'none');
    152 
    153  SimpleTest.finish();
    154 }
    155 
    156 ////////////////////////////////////////
    157 
    158 SimpleTest.waitForExplicitFinish();
    159 
    160 var prefPairList = [
    161  ['webgl.force-enabled', true],
    162  ['webgl.enable-debug-renderer-info', true],
    163 ];
    164 RunWithPrefs(prefPairList, TestDefault);
    165 
    166 </script>
    167 </body>
    168 </html>