Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: third_party/WebKit/LayoutTests/fast/canvas/webgl/offscreenCanvas-context-lost.html

Issue 2490443002: Make OffscreenCanvas an EventTarget (Closed)
Patch Set: pass API layout tests Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/fast/canvas/webgl/offscreenCanvas-context-lost-restored.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <script src="../../../resources/testharness.js"></script>
5 <script src="../../../resources/testharnessreport.js"></script>
6 <script src="./resources/webgl-test-utils-full.js"></script>
7 </head>
8
9 <body>
10 <script>
11 var wtu;
12 var canvas;
13 var gl;
14 var extensionName;
15 var extension;
16
17 var buffer;
18 var framebuffer;
19 var program;
20 var renderbuffer;
21 var shader;
22 var texture;
23 var uniformLocation;
24 var arrayBuffer;
25 var arrayBufferView
26 var image;
27 var video;
28 var canvas2d;
29 var ctx2d;
30 var imageData;
31 var float32array;
32 var int32array;
33 var OES_vertex_array_object;
34 var vertexArrayObject;
35
36 async_test(function(t) {
37 wtu = WebGLTestUtils;
38 canvas = new OffscreenCanvas(10, 10);
39 gl = canvas.getContext('webgl');
40
41 // call testValidContext() before checking for the extension, because this i s where we check
42 // for the isContextLost() method, which we want to do regardless of the ext ension's presence.
43 testValidContext();
44
45 extensionName = wtu.getSupportedExtensionWithKnownPrefixes(gl, "WEBGL_lose_c ontext");
46 if (!extensionName) {
47 assert_true(false, "Could not find WEBGL_lose_context extension");
48 }
49 extension = gl.getExtension(extensionName);
50
51 // need an extension that exposes new API methods.
52 OES_vertex_array_object = wtu.getExtensionWithKnownPrefixes(gl, "OES_vertex_ array_object");
53
54 canvas.addEventListener("webglcontextlost", t.step_func_done(function() {
55 testLostContext();
56 }));
57
58 // We need to initialize |uniformLocation| before losing context.
59 // Otherwise gl.getUniform() when context is lost will throw.
60 uniformLocation = gl.getUniformLocation(program, "tex");
61 loseContext();
62 }, 'Test that WebGL context loss events can be handled with OffscreenCanvas');
63
64 function loseContext()
65 {
66 // Note: this will cause the context to be lost, but the
67 // webglcontextlost event listener to be queued.
68 extension.loseContext();
69 }
70
71 function compareGLError(glError, evalStr)
72 {
73 var exception;
74 try {
75 eval(evalStr);
76 } catch (e) {
77 exception = e;
78 }
79 if (exception) {
80 assert_true(false, evalStr + " threw exception " + exception);
81 } else {
82 assert_equals(gl.getError(), glError);
83 }
84 }
85
86 function testValidContext()
87 {
88 assert_false(gl.isContextLost());
89
90 arrayBuffer = new ArrayBuffer(4);
91 arrayBufferView = new Int8Array(arrayBuffer);
92
93 // Generate resources for testing.
94 buffer = gl.createBuffer();
95 gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
96 framebuffer = gl.createFramebuffer();
97 gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
98 program = wtu.setupSimpleTextureProgram(gl);
99 renderbuffer = gl.createRenderbuffer();
100 gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
101 shader = gl.createShader(gl.VERTEX_SHADER);
102 texture = gl.createTexture();
103 gl.bindTexture(gl.TEXTURE_2D, texture);
104 assert_equals(gl.getError(), gl.NO_ERROR);
105
106 // Test is queries that will later be false
107 compareGLError(gl.NO_ERROR, "gl.enable(gl.BLEND)");
108 assert_true(gl.isBuffer(buffer));
109 assert_true(gl.isEnabled(gl.BLEND));
110 assert_true(gl.isFramebuffer(framebuffer));
111 assert_true(gl.isProgram(program));
112 assert_true(gl.isRenderbuffer(renderbuffer));
113 assert_true(gl.isShader(shader));
114 assert_true(gl.isTexture(texture));
115 }
116
117 function testLostContext()
118 {
119 // Functions with special return values.
120 assert_true(gl.isContextLost());
121 assert_equals(gl.getError(), gl.CONTEXT_LOST_WEBGL);
122 assert_equals(gl.getError(), gl.NO_ERROR);
123 assert_equals(gl.checkFramebufferStatus(gl.FRAMEBUFFER), gl.FRAMEBUFFER_UNSU PPORTED);
124 assert_equals(gl.getAttribLocation(program, 'u_modelViewProjMatrix'), -1);
125 assert_equals(gl.getVertexAttribOffset(0, gl.VERTEX_ATTRIB_ARRAY_POINTER), 0 );
126
127 // Test the extension itself.
128 compareGLError(gl.INVALID_OPERATION, "extension.loseContext()");
129
130 image = document.createElement("img");
131 video = document.createElement("video");
132 canvas2d = document.createElement("canvas");
133 ctx2d = canvas2d.getContext("2d");
134 imageData = ctx2d.createImageData(1, 1);
135 float32array = new Float32Array(1);
136 int32array = new Int32Array(1);
137
138 // Test a set of functions that should not generate any GL error
139 compareGLError(gl.NO_ERROR, "gl.activeTexture(gl.TEXTURE0)");
140 compareGLError(gl.NO_ERROR, "gl.attachShader(program, shader)");
141 compareGLError(gl.NO_ERROR, "gl.bindBuffer(gl.ARRAY_BUFFER, buffer)");
142 compareGLError(gl.NO_ERROR, "gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer) ");
143 compareGLError(gl.NO_ERROR, "gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuff er)");
144 compareGLError(gl.NO_ERROR, "gl.bindTexture(gl.TEXTURE_2D, texture)");
145 compareGLError(gl.NO_ERROR, "gl.blendColor(1.0, 1.0, 1.0, 1.0)");
146 compareGLError(gl.NO_ERROR, "gl.blendEquation(gl.FUNC_ADD)");
147 compareGLError(gl.NO_ERROR, "gl.blendEquationSeparate(gl.FUNC_ADD, gl.FUNC_A DD)");
148 compareGLError(gl.NO_ERROR, "gl.blendFunc(gl.ONE, gl.ONE)");
149 compareGLError(gl.NO_ERROR, "gl.blendFuncSeparate(gl.ONE, gl.ONE, gl.ONE, gl .ONE)");
150 compareGLError(gl.NO_ERROR, "gl.bufferData(gl.ARRAY_BUFFER, 0, gl.STATIC_DRA W)");
151 compareGLError(gl.NO_ERROR, "gl.bufferData(gl.ARRAY_BUFFER, arrayBufferView, gl.STATIC_DRAW)");
152 compareGLError(gl.NO_ERROR, "gl.bufferData(gl.ARRAY_BUFFER, arrayBuffer, gl. STATIC_DRAW)");
153 compareGLError(gl.NO_ERROR, "gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBuffe rView)");
154 compareGLError(gl.NO_ERROR, "gl.bufferSubData(gl.ARRAY_BUFFRE, 0, arrayBuffe r)");
155 compareGLError(gl.NO_ERROR, "gl.clear(gl.COLOR_BUFFER_BIT)");
156 compareGLError(gl.NO_ERROR, "gl.clearColor(1, 1, 1, 1)");
157 compareGLError(gl.NO_ERROR, "gl.clearDepth(1)");
158 compareGLError(gl.NO_ERROR, "gl.clearStencil(0)");
159 compareGLError(gl.NO_ERROR, "gl.colorMask(1, 1, 1, 1)");
160 compareGLError(gl.NO_ERROR, "gl.compileShader(shader)");
161 compareGLError(gl.NO_ERROR, "gl.copyTexImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, 0, 0)");
162 compareGLError(gl.NO_ERROR, "gl.copyTexSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, 0, 0)");
163 compareGLError(gl.NO_ERROR, "gl.cullFace(gl.FRONT)");
164 compareGLError(gl.NO_ERROR, "gl.deleteBuffer(buffer)");
165 compareGLError(gl.NO_ERROR, "gl.deleteFramebuffer(framebuffer)");
166 compareGLError(gl.NO_ERROR, "gl.deleteProgram(program)");
167 compareGLError(gl.NO_ERROR, "gl.deleteRenderbuffer(renderbuffer)");
168 compareGLError(gl.NO_ERROR, "gl.deleteShader(shader)");
169 compareGLError(gl.NO_ERROR, "gl.deleteTexture(texture)");
170 compareGLError(gl.NO_ERROR, "gl.depthFunc(gl.NEVER)");
171 compareGLError(gl.NO_ERROR, "gl.depthMask(0)");
172 compareGLError(gl.NO_ERROR, "gl.depthRange(0, 1)");
173 compareGLError(gl.NO_ERROR, "gl.detachShader(program, shader)");
174 compareGLError(gl.NO_ERROR, "gl.disable(gl.BLEND)");
175 compareGLError(gl.NO_ERROR, "gl.disableVertexAttribArray(0)");
176 compareGLError(gl.NO_ERROR, "gl.drawArrays(gl.POINTS, 0, 0)");
177 compareGLError(gl.NO_ERROR, "gl.drawElements(gl.POINTS, 0, gl.UNSIGNED_SHORT , 0)");
178 compareGLError(gl.NO_ERROR, "gl.enable(gl.BLEND)");
179 compareGLError(gl.NO_ERROR, "gl.enableVertexAttribArray(0)");
180 compareGLError(gl.NO_ERROR, "gl.finish()");
181 compareGLError(gl.NO_ERROR, "gl.flush()");
182 compareGLError(gl.NO_ERROR, "gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.C OLOR_ATTACHMENT0, gl.RENDERBUFFER, renderbuffer)");
183 compareGLError(gl.NO_ERROR, "gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLO R_ATTACHMENT0, gl.TEXTURE_2D, texture, 0)");
184 compareGLError(gl.NO_ERROR, "gl.frontFace(gl.CW)");
185 compareGLError(gl.NO_ERROR, "gl.generateMipmap(gl.TEXTURE_2D)");
186 compareGLError(gl.NO_ERROR, "gl.hint(gl.GENERATE_MIPMAP_HINT, gl.FASTEST)");
187 compareGLError(gl.NO_ERROR, "gl.lineWidth(0)");
188 compareGLError(gl.NO_ERROR, "gl.linkProgram(program)");
189 compareGLError(gl.NO_ERROR, "gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0)");
190 compareGLError(gl.NO_ERROR, "gl.polygonOffset(0, 0)");
191 compareGLError(gl.NO_ERROR, "gl.readPixels(0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_ BYTE, arrayBufferView)");
192 compareGLError(gl.NO_ERROR, "gl.renderbufferStorage(gl.RENDERBUFFER, gl.RGBA 4, 0, 0)");
193 compareGLError(gl.NO_ERROR, "gl.sampleCoverage(0, 0)");
194 compareGLError(gl.NO_ERROR, "gl.scissor(0, 0, 0, 0)");
195 compareGLError(gl.NO_ERROR, "gl.shaderSource(shader, '')");
196 compareGLError(gl.NO_ERROR, "gl.stencilFunc(gl.NEVER, 0, 0)");
197 compareGLError(gl.NO_ERROR, "gl.stencilFuncSeparate(gl.FRONT, gl.NEVER, 0, 0 )");
198 compareGLError(gl.NO_ERROR, "gl.stencilMask(0)");
199 compareGLError(gl.NO_ERROR, "gl.stencilMaskSeparate(gl.FRONT, 0)");
200 compareGLError(gl.NO_ERROR, "gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP)");
201 compareGLError(gl.NO_ERROR, "gl.stencilOpSeparate(gl.FRONT, gl.KEEP, gl.KEEP , gl.KEEP)");
202 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)");
203 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGB A, gl.UNSIGNED_BYTE, imageData)");
204 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGB A, gl.UNSIGNED_BYTE, image)");
205 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGB A, gl.UNSIGNED_BYTE, canvas2d)");
206 compareGLError(gl.NO_ERROR, "gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGB A, gl.UNSIGNED_BYTE, video)");
207 compareGLError(gl.NO_ERROR, "gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MIN_ FILTER, gl.NEAREST)");
208 compareGLError(gl.NO_ERROR, "gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_ FILTER, gl.NEAREST)");
209 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, arrayBufferView)");
210 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB A, gl.UNSIGNED_BYTE, imageData)");
211 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB A, gl.UNSIGNED_BYTE, image)");
212 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB A, gl.UNSIGNED_BYTE, canvas2d)");
213 compareGLError(gl.NO_ERROR, "gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGB A, gl.UNSIGNED_BYTE, video)");
214 compareGLError(gl.NO_ERROR, "gl.uniform1f(uniformLocation, 0)");
215 compareGLError(gl.NO_ERROR, "gl.uniform1fv(uniformLocation, float32array)");
216 compareGLError(gl.NO_ERROR, "gl.uniform1fv(uniformLocation, [0])");
217 compareGLError(gl.NO_ERROR, "gl.uniform1i(uniformLocation, 0)");
218 compareGLError(gl.NO_ERROR, "gl.uniform1iv(uniformLocation, int32array)");
219 compareGLError(gl.NO_ERROR, "gl.uniform1iv(uniformLocation, [0])");
220 compareGLError(gl.NO_ERROR, "gl.uniform2f(uniformLocation, 0, 0)");
221 compareGLError(gl.NO_ERROR, "gl.uniform2fv(uniformLocation, float32array)");
222 compareGLError(gl.NO_ERROR, "gl.uniform2fv(uniformLocation, [0, 0])");
223 compareGLError(gl.NO_ERROR, "gl.uniform2i(uniformLocation, 0, 0)");
224 compareGLError(gl.NO_ERROR, "gl.uniform2iv(uniformLocation, int32array)");
225 compareGLError(gl.NO_ERROR, "gl.uniform2iv(uniformLocation, [0, 0])");
226 compareGLError(gl.NO_ERROR, "gl.uniform3f(uniformLocation, 0, 0, 0)");
227 compareGLError(gl.NO_ERROR, "gl.uniform3fv(uniformLocation, float32array)");
228 compareGLError(gl.NO_ERROR, "gl.uniform3fv(uniformLocation, [0, 0, 0])");
229 compareGLError(gl.NO_ERROR, "gl.uniform3i(uniformLocation, 0, 0, 0)");
230 compareGLError(gl.NO_ERROR, "gl.uniform3iv(uniformLocation, int32array)");
231 compareGLError(gl.NO_ERROR, "gl.uniform3iv(uniformLocation, [0, 0, 0])");
232 compareGLError(gl.NO_ERROR, "gl.uniform4f(uniformLocation, 0, 0, 0, 0)");
233 compareGLError(gl.NO_ERROR, "gl.uniform4fv(uniformLocation, float32array)");
234 compareGLError(gl.NO_ERROR, "gl.uniform4fv(uniformLocation, [0, 0, 0, 0])");
235 compareGLError(gl.NO_ERROR, "gl.uniform4i(uniformLocation, 0, 0, 0, 0)");
236 compareGLError(gl.NO_ERROR, "gl.uniform4iv(uniformLocation, int32array)");
237 compareGLError(gl.NO_ERROR, "gl.uniform4iv(uniformLocation, [0, 0, 0, 0])");
238 compareGLError(gl.NO_ERROR, "gl.uniformMatrix2fv(uniformLocation, false, flo at32array)");
239 compareGLError(gl.NO_ERROR, "gl.uniformMatrix2fv(uniformLocation, false, [0, 0, 0, 0])");
240 compareGLError(gl.NO_ERROR, "gl.uniformMatrix3fv(uniformLocation, false, flo at32array)");
241 compareGLError(gl.NO_ERROR, "gl.uniformMatrix3fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0])");
242 compareGLError(gl.NO_ERROR, "gl.uniformMatrix4fv(uniformLocation, false, flo at32array)");
243 compareGLError(gl.NO_ERROR, "gl.uniformMatrix4fv(uniformLocation, false, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])");
244 compareGLError(gl.NO_ERROR, "gl.useProgram(program)");
245 compareGLError(gl.NO_ERROR, "gl.validateProgram(program)");
246 compareGLError(gl.NO_ERROR, "gl.vertexAttrib1f(0, 0)");
247 compareGLError(gl.NO_ERROR, "gl.vertexAttrib1fv(0, float32array)");
248 compareGLError(gl.NO_ERROR, "gl.vertexAttrib1fv(0, [0])");
249 compareGLError(gl.NO_ERROR, "gl.vertexAttrib2f(0, 0, 0)");
250 compareGLError(gl.NO_ERROR, "gl.vertexAttrib2fv(0, float32array)");
251 compareGLError(gl.NO_ERROR, "gl.vertexAttrib2fv(0, [0, 0])");
252 compareGLError(gl.NO_ERROR, "gl.vertexAttrib3f(0, 0, 0, 0)");
253 compareGLError(gl.NO_ERROR, "gl.vertexAttrib3fv(0, float32array)");
254 compareGLError(gl.NO_ERROR, "gl.vertexAttrib3fv(0, [0, 0, 0])");
255 compareGLError(gl.NO_ERROR, "gl.vertexAttrib4f(0, 0, 0, 0, 0)");
256 compareGLError(gl.NO_ERROR, "gl.vertexAttrib4fv(0, float32array)");
257 compareGLError(gl.NO_ERROR, "gl.vertexAttrib4fv(0, [0, 0, 0, 0])");
258 compareGLError(gl.NO_ERROR, "gl.vertexAttribPointer(0, 0, gl.FLOAT, false, 0 , 0)");
259 compareGLError(gl.NO_ERROR, "gl.viewport(0, 0, 0, 0)");
260
261 // Test a set of functions that should return null
262 assert_equals(gl.createBuffer(), null);
263 assert_equals(gl.createFramebuffer(), null);
264 assert_equals(gl.createProgram(), null);
265 assert_equals(gl.createRenderbuffer(), null);
266 assert_equals(gl.createShader(gl.GL_VERTEX_SHADER), null);
267 assert_equals(gl.createTexture(), null);
268 assert_equals(gl.getActiveAttrib(program, 0), null);
269 assert_equals(gl.getActiveUniform(program, 0), null);
270 assert_equals(gl.getAttachedShaders(program), null);
271 assert_equals(gl.getBufferParameter(gl.ARRAY_BUFFER, gl.BUFFER_SIZE), null);
272 assert_equals(gl.getContextAttributes(), null);
273 assert_equals(gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl.COLOR_ ATTACHMENT0, gl.FRAMEBUFFER_ATTACHMENT_OBJECT_NAME), null);
274 assert_equals(gl.getParameter(gl.CURRENT_PROGRAM), null);
275 assert_equals(gl.getProgramInfoLog(program), null);
276 assert_equals(gl.getProgramParameter(program, gl.LINK_STATUS), null);
277 assert_equals(gl.getRenderbufferParameter(gl.RENDERBUFFER, gl.RENDERBUFFER_W IDTH), null);
278 assert_equals(gl.getShaderInfoLog(shader), null);
279 assert_equals(gl.getShaderParameter(shader, gl.SHADER_TYPE), null);
280 assert_equals(gl.getShaderSource(shader), null);
281 assert_equals(gl.getTexParameter(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S), null);
282 assert_equals(gl.getUniform(program, uniformLocation), null);
283 assert_equals(gl.getUniformLocation(program, 'vPosition'), null);
284 assert_equals(gl.getVertexAttrib(0, gl.VERTEX_ATTRIB_ARRAY_BUFFER_BINDING), null);
285 assert_equals(gl.getSupportedExtensions(), null);
286 assert_equals(eval("gl.getExtension('" + extensionName + "')"), null);
287
288 // "Is" queries should all return false.
289 assert_false(gl.isBuffer(buffer));
290 assert_false(gl.isEnabled(gl.BLEND));
291 assert_false(gl.isFramebuffer(framebuffer));
292 assert_false(gl.isProgram(program));
293 assert_false(gl.isRenderbuffer(renderbuffer));
294 assert_false(gl.isShader(shader));
295 assert_false(gl.isTexture(texture));
296
297 assert_equals(gl.getError(), gl.NO_ERROR);
298
299 // test extensions
300 if (OES_vertex_array_object) {
301 compareGLError(gl.NO_ERROR, "OES_vertex_array_object.bindVertexArrayOES( vertexArrayObject)");
302 compareGLError(gl.NO_ERROR, "OES_vertex_array_object.isVertexArrayOES(ve rtexArrayObject)");
303 compareGLError(gl.NO_ERROR, "OES_vertex_array_object.deleteVertexArrayOE S(vertexArrayObject)");
304 assert_equals(OES_vertex_array_object.createVertexArrayOES(), null);
305 }
306 }
307
308 </script>
309 </body>
310 </html>
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/fast/canvas/webgl/offscreenCanvas-context-lost-restored.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698