1 <html> 2 <head> 3 <script type="text/javascript"> 4 var canvas; 5 var w, h; 6 var gl; 7 var extension; 8 9 var alreadySetAutomationId = false; 10 11 function testHorizontalBands() { 12 gl.enable(gl.SCISSOR_TEST); 13 14 gl.clearColor(1, 0, 0, 1); 15 gl.scissor(0, 0, w, h/2); 16 gl.clear(gl.COLOR_BUFFER_BIT); 17 18 gl.clearColor(0, 1, 0, 1); 19 gl.scissor(0, h/2, w, h/2); 20 gl.clear(gl.COLOR_BUFFER_BIT); 21 22 gl.disable(gl.SCISSOR_TEST); 23 24 var size = w * h * 4; 25 var array = new Uint8Array(size); 26 gl.readPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, array); 27 28 return array[0] == 255 && array[1] == 0 && 29 array[size - 4] == 0 && array[size - 3] == 255; 30 } 31 32 function testContextLost(e) { 33 e.preventDefault(); 34 if (extension) { 35 setTimeout(function() { 36 extension.restoreContext(); 37 extension = null; 38 }, 0); 39 } 40 } 41 42 function testContextRestored() { 43 gl = canvas.getContext("experimental-webgl"); 44 if (!gl || gl.isContextLost()) { 45 // Might just be blocked because of infobar. 46 return; 47 } 48 gl.clearColor(0, 0, 1, 1); 49 gl.clear(gl.COLOR_BUFFER_BIT); 50 51 var a = new Uint8Array(w * h * 4); 52 gl.readPixels(0, 0, w, h, gl.RGBA, gl.UNSIGNED_BYTE, a); 53 54 if (!alreadySetAutomationId) 55 window.domAutomationController.setAutomationId(1); 56 if (a[0] == 0 && a[1] == 0 && a[2] == 255) 57 window.domAutomationController.send("SUCCESS"); 58 else 59 window.domAutomationController.send("FAILED"); 60 } 61 62 function contextLostTest(kind) 63 { 64 switch (kind) { 65 case "WEBGL_lose_context": { 66 extension = gl.getExtension("WEBKIT_WEBGL_lose_context") || 67 gl.getExtension("WEBGL_lose_context"); 68 extension.loseContext(); 69 break; 70 } 71 case "kill": 72 // nothing -- the browser test navigates to about:gpucrash and kills 73 // the GPU process. 74 break; 75 case "kill_after_notification": 76 // The browser test waits for notification from the page that it 77 // has been loaded before navigating to about:gpucrash. 78 window.domAutomationController.setAutomationId(1); 79 alreadySetAutomationId = true; 80 window.domAutomationController.send("LOADED"); 81 break; 82 } 83 } 84 85 function onLoad() { 86 canvas = document.getElementById("canvas1"); 87 w = canvas.width; 88 h = canvas.height; 89 if (!canvas) 90 return; 91 canvas.addEventListener("webglcontextlost", testContextLost, false); 92 canvas.addEventListener("webglcontextrestored", testContextRestored, false); 93 94 gl = canvas.getContext("experimental-webgl"); 95 if (!gl) 96 return; 97 98 if (!testHorizontalBands()) 99 return; 100 101 var query = /query=(.*)/.exec(window.location.href); 102 if (query) 103 contextLostTest(query[1]); 104 } 105 </script> 106 </head> 107 <body onload="onLoad()"> 108 <canvas id="canvas1" width="16px" height="32px"> 109 </canvas> 110 </body> 111 </html> 112