<!DOCTYPE HTML> <html> <head> <meta charset='UTF-8'> <script src='/tests/SimpleTest/SimpleTest.js'></script> <link rel='stylesheet' href='/tests/SimpleTest/test.css'> </head> <body> <script> function RunWithPrefs(prefPairList, func) { var prefEnv = {'set': prefPairList}; try { SpecialPowers.pushPrefEnv(prefEnv, func); } catch (e) { console.log('Warning: Failed to set prefs: ' + JSON.stringify(prefPairList)); func(); } } //////////////////////////////////////// var ANGLE_IS_SINGLETON = true; var expectD3DType; try { // code borrowed from browser/modules/test/browser_taskbar_preview.js var version = SpecialPowers.Services.sysinfo.getProperty('version'); version = parseFloat(version); // Version 6.0 is Vista, 6.1 is 7. if (version <= 6.0) expectD3DType = 'd3d9'; else expectD3DType = 'd3d11'; } catch (e) { expectD3DType = 'd3d11'; } function GetRenderer() { var c = document.createElement('canvas'); var gl = c.getContext('experimental-webgl'); if (!gl) return undefined; var ext = gl.getExtension('WEBGL_debug_renderer_info'); if (!ext) throw new Error('Requires WEBGL_debug_renderer_info.'); var renderer = gl.getParameter(ext.UNMASKED_RENDERER_WEBGL); return renderer; } function GetRendererType() { var renderer = GetRenderer(); if (renderer === undefined) return 'none'; if (renderer.includes('ANGLE')) { if (renderer.includes('Microsoft Basic Render Driver')) // Also includes 'Direct3D11'. return 'warp'; if (renderer.includes('Direct3D11')) return 'd3d11'; if (renderer.includes('Direct3D9')) return 'd3d9'; } else { return 'gl'; } throw new Error('Unrecognized renderer type for: ' + renderer); } function TestActualType(testName, expectedType) { var actualType = GetRendererType(); ok(actualType == expectedType, '[' + testName + '] Expected ' + expectedType + ', was ' + actualType); } //////////////////////////////////////// function TestDefault() { var expectedType = 'gl'; var isWindows = (navigator.platform.indexOf('Win') == 0); if (isWindows) { expectedType = expectD3DType; } TestActualType('TestDefault', expectedType); if (isWindows && !ANGLE_IS_SINGLETON) { var prefPairList = [ ['webgl.angle.force-warp', true], ]; RunWithPrefs(prefPairList, TestWARP); return; } var prefPairList = [ ['webgl.disabled', true], ]; RunWithPrefs(prefPairList, TestDisabled); return; } function TestWARP() { var expectedType = (expectD3DType == 'd3d11') ? 'warp' : 'none'; TestActualType('TestWARP', expectedType); var prefPairList = [ ['webgl.angle.force-warp', false], ['webgl.angle.force-d3d11', true], ]; RunWithPrefs(prefPairList, TestD3D11); } function TestD3D11() { var expectedType = (expectD3DType == 'd3d11') ? 'd3d11' : 'none'; TestActualType('TestD3D11', expectedType); var prefPairList = [ ['webgl.angle.force-d3d11', false], ['webgl.angle.try-d3d11', false], ]; RunWithPrefs(prefPairList, TestD3D9); } function TestD3D9() { TestActualType('TestD3D9', 'd3d9'); var prefPairList = [ ['webgl.angle.try-d3d11', true], ['webgl.disable-angle', true], ]; RunWithPrefs(prefPairList, TestWinGL); } function TestWinGL() { TestActualType('TestWinGL', 'gl'); var prefPairList = [ ['webgl.disabled', true], ]; RunWithPrefs(prefPairList, TestDisabled); } function TestDisabled() { TestActualType('TestDisabled', 'none'); SimpleTest.finish(); } //////////////////////////////////////// SimpleTest.waitForExplicitFinish(); var prefPairList = [ ['webgl.force-enabled', true], ['webgl.enable-debug-renderer-info', true], ]; RunWithPrefs(prefPairList, TestDefault); </script> </body> </html>