diff --git a/engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views.dart b/engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views.dart index 9e1f48e8bb1..a2e028a0e82 100644 --- a/engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views.dart +++ b/engine/src/flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views.dart @@ -322,6 +322,11 @@ class HtmlViewEmbedder { clipView.style.clipPath = ''; headTransform = Matrix4.identity(); clipView.style.transform = ''; + // We need to set width and height for the clipView to cover the + // bounds of the path since Safari seem to incorrectly intersect + // the element bounding rect with the clip path. + clipView.style.width = '100%'; + clipView.style.height = '100%'; if (mutator.rect != null) { final ui.Rect rect = mutator.rect!; clipView.style.clip = 'rect(${rect.top}px, ${rect.right}px, ' diff --git a/engine/src/flutter/lib/web_ui/test/canvaskit/embedded_views_test.dart b/engine/src/flutter/lib/web_ui/test/canvaskit/embedded_views_test.dart index 7cdb18c0120..e72bc0df0c6 100644 --- a/engine/src/flutter/lib/web_ui/test/canvaskit/embedded_views_test.dart +++ b/engine/src/flutter/lib/web_ui/test/canvaskit/embedded_views_test.dart @@ -95,6 +95,22 @@ void testMain() { .clipPath, 'url("#svgClip1")', ); + expect( + flutterViewEmbedder.sceneElement! + .querySelectorAll('flt-clip') + .single + .style + .width, + '100%', + ); + expect( + flutterViewEmbedder.sceneElement! + .querySelectorAll('flt-clip') + .single + .style + .height, + '100%', + ); }); test('correctly transforms platform views', () async {