From ff2e06a81cfa78761c1f5f2c4e8dc09b45e62279 Mon Sep 17 00:00:00 2001 From: Harry Terkelsen Date: Tue, 15 Nov 2022 11:26:48 -0800 Subject: [PATCH 1/3] Fix surface test --- lib/web_ui/test/canvaskit/surface_test.dart | 24 +++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/lib/web_ui/test/canvaskit/surface_test.dart b/lib/web_ui/test/canvaskit/surface_test.dart index 178fd5f762c06..ce98a77fe5716 100644 --- a/lib/web_ui/test/canvaskit/surface_test.dart +++ b/lib/web_ui/test/canvaskit/surface_test.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:js_util' as js_util; + import 'package:test/bootstrap/browser.dart'; import 'package:test/test.dart'; import 'package:ui/src/engine.dart'; @@ -141,20 +143,23 @@ void testMain() { // Emulate WebGL context loss. final DomCanvasElement canvas = surface.htmlElement.children.single as DomCanvasElement; - final dynamic ctx = canvas.getContext('webgl2'); - expect(ctx, isNotNull); - final dynamic loseContextExtension = - ctx.getExtension('WEBGL_lose_context'); - loseContextExtension.loseContext(); + final Object ctx = canvas.getContext('webgl2')!; + final Object loseContextExtension = js_util.callMethod( + ctx, + 'getExtension', + ['WEBGL_lose_context'], + ); + js_util.callMethod(loseContextExtension, 'loseContext', const []); // Pump a timer to allow the "lose context" event to propagate. await Future.delayed(Duration.zero); // We don't create a new GL context until the context is restored. expect(surface.debugContextLost, isTrue); - expect(ctx.isContextLost(), isTrue); + final bool isContextLost = js_util.callMethod(ctx, 'isContextLost', const []); + expect(isContextLost, isTrue); // Emulate WebGL context restoration. - loseContextExtension.restoreContext(); + js_util.callMethod(loseContextExtension, 'restoreContext', const []); // Pump a timer to allow the "restore context" event to propagate. await Future.delayed(Duration.zero); @@ -164,10 +169,7 @@ void testMain() { surface.acquireFrame(const ui.Size(9, 19)).skiaSurface; // A new context is created. expect(afterContextLost, isNot(same(before))); - }, - // Firefox and Safari don't have the WEBGL_lose_context extension. - // TODO(hterkelsen): https://github.com/flutter/flutter/issues/115327 - skip: true, + } ); // Regression test for https://github.com/flutter/flutter/issues/75286 From 6a681e1ce3469d6b88e60cf273a976358355acb9 Mon Sep 17 00:00:00 2001 From: Harry Terkelsen Date: Tue, 15 Nov 2022 11:27:57 -0800 Subject: [PATCH 2/3] trailing whitespace --- lib/web_ui/test/canvaskit/surface_test.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/web_ui/test/canvaskit/surface_test.dart b/lib/web_ui/test/canvaskit/surface_test.dart index ce98a77fe5716..f3569cc8cc3b5 100644 --- a/lib/web_ui/test/canvaskit/surface_test.dart +++ b/lib/web_ui/test/canvaskit/surface_test.dart @@ -145,7 +145,7 @@ void testMain() { surface.htmlElement.children.single as DomCanvasElement; final Object ctx = canvas.getContext('webgl2')!; final Object loseContextExtension = js_util.callMethod( - ctx, + ctx, 'getExtension', ['WEBGL_lose_context'], ); From b0397d3c1c2795b9b4a0730b997385f7f9943ebe Mon Sep 17 00:00:00 2001 From: Harry Terkelsen Date: Tue, 15 Nov 2022 12:43:55 -0800 Subject: [PATCH 3/3] Skip test in firefox --- lib/web_ui/test/canvaskit/surface_test.dart | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/web_ui/test/canvaskit/surface_test.dart b/lib/web_ui/test/canvaskit/surface_test.dart index f3569cc8cc3b5..f3d7e26ddb044 100644 --- a/lib/web_ui/test/canvaskit/surface_test.dart +++ b/lib/web_ui/test/canvaskit/surface_test.dart @@ -169,7 +169,9 @@ void testMain() { surface.acquireFrame(const ui.Size(9, 19)).skiaSurface; // A new context is created. expect(afterContextLost, isNot(same(before))); - } + }, + // Firefox can't create a WebGL2 context in headless mode. + skip: isFirefox, ); // Regression test for https://github.com/flutter/flutter/issues/75286