Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[web] Move platformViewRegistry to ui_web #41877

Merged
merged 10 commits into from
May 23, 2023
2 changes: 2 additions & 0 deletions ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -2061,6 +2061,7 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/text.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/tile_mode.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/ui.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/platform_view_registry.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/url_strategy.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/window.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/canvas.cpp + ../../../flutter/LICENSE
Expand Down Expand Up @@ -4664,6 +4665,7 @@ FILE: ../../../flutter/lib/web_ui/lib/text.dart
FILE: ../../../flutter/lib/web_ui/lib/tile_mode.dart
FILE: ../../../flutter/lib/web_ui/lib/ui.dart
FILE: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web.dart
FILE: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/platform_view_registry.dart
FILE: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/url_strategy.dart
FILE: ../../../flutter/lib/web_ui/lib/window.dart
FILE: ../../../flutter/lib/web_ui/skwasm/canvas.cpp
Expand Down
18 changes: 2 additions & 16 deletions lib/web_ui/lib/initialization.dart
Original file line number Diff line number Diff line change
Expand Up @@ -125,19 +125,5 @@ void webOnlySetPluginHandler(Future<void> Function(String, ByteData?, PlatformMe
engine.pluginMessageCallHandler = handler;
}

/// A registry for factories that create platform views.
class PlatformViewRegistry {
/// Register [viewTypeId] as being creating by the given [viewFactory].
/// [viewFactory] can be any function that takes an integer and returns an
/// `HTMLElement` DOM object.
bool registerViewFactory(String viewTypeId,
Object Function(int viewId) viewFactory,
{bool isVisible = true}) {
// TODO(web): Deprecate this once there's another way of calling `registerFactory` (js interop?)
return engine.platformViewManager
.registerFactory(viewTypeId, viewFactory, isVisible: isVisible);
}
}

/// The platform view registry for this app.
final PlatformViewRegistry platformViewRegistry = PlatformViewRegistry();
// TODO(mdebbar): Deprecate this and remove it.
ui_web.PlatformViewRegistry get platformViewRegistry => ui_web.platformViewRegistry;
ditman marked this conversation as resolved.
Show resolved Hide resolved
1 change: 1 addition & 0 deletions lib/web_ui/lib/ui.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'dart:math' as math;
import 'dart:typed_data';

import 'src/engine.dart' as engine;
import 'ui_web/src/ui_web.dart' as ui_web;
ditman marked this conversation as resolved.
Show resolved Hide resolved

part 'annotations.dart';
part 'canvas.dart';
Expand Down
1 change: 1 addition & 0 deletions lib/web_ui/lib/ui_web/src/ui_web.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
// ignore: unnecessary_library_directive
library ui_web;

export 'ui_web/platform_view_registry.dart';
export 'ui_web/url_strategy.dart';
26 changes: 26 additions & 0 deletions lib/web_ui/lib/ui_web/src/ui_web/platform_view_registry.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:ui/src/engine.dart';

/// The platform view registry for this app.
final PlatformViewRegistry platformViewRegistry = PlatformViewRegistry();

/// A registry for factories that create platform views.
class PlatformViewRegistry {
/// Register [viewTypeId] as being creating by the given [viewFactory].
/// [viewFactory] can be any function that takes an integer and returns an
/// `HTMLElement` DOM object.
bool registerViewFactory(
String viewTypeId,
Object Function(int viewId) viewFactory, {
bool isVisible = true,
}) {
return platformViewManager.registerFactory(
viewTypeId,
viewFactory,
isVisible: isVisible,
);
}
}
3 changes: 2 additions & 1 deletion lib/web_ui/test/canvaskit/canvas_golden_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine.dart';
import 'package:ui/ui.dart' as ui;
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;

import 'package:web_engine_tester/golden_tester.dart';

Expand Down Expand Up @@ -660,7 +661,7 @@ void testMain() {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
SurfaceFactory.instance.debugClear();

ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down
39 changes: 20 additions & 19 deletions lib/web_ui/test/canvaskit/embedded_views_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine.dart';
import 'package:ui/ui.dart' as ui;
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;

import 'common.dart';
import 'test_data.dart';
Expand All @@ -27,7 +28,7 @@ void testMain() {

test('embeds interactive platform views', () async {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -62,7 +63,7 @@ void testMain() {

test('clips platform views with RRects', () async {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -117,7 +118,7 @@ void testMain() {

test('correctly transforms platform views', () async {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -147,7 +148,7 @@ void testMain() {
});

test('correctly offsets platform views', () async {
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -185,7 +186,7 @@ void testMain() {
}

test('correctly offsets when clip chain length is changed', () async {
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -236,7 +237,7 @@ void testMain() {

test('converts device pixels to logical pixels (no clips)', () async {
window.debugOverrideDevicePixelRatio(4);
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand All @@ -261,7 +262,7 @@ void testMain() {

test('converts device pixels to logical pixels (with clips)', () async {
window.debugOverrideDevicePixelRatio(4);
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -301,7 +302,7 @@ void testMain() {
// Initialize all platform views to be used in the test.
final List<int> platformViewIds = <int>[];
for (int i = 0; i < 16; i++) {
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-$i',
);
Expand Down Expand Up @@ -454,7 +455,7 @@ void testMain() {
// Initialize all platform views to be used in the test.
final List<int> platformViewIds = <int>[];
for (int i = 0; i < 20; i++) {
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-$i',
);
Expand Down Expand Up @@ -581,7 +582,7 @@ void testMain() {
}, skip: isSafari);

test('embeds and disposes of a platform view', () async {
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -621,7 +622,7 @@ void testMain() {
});

test('does not crash when resizing the window after textures have been registered', () async {
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -668,7 +669,7 @@ void testMain() {

test('removed the DOM node of an unrendered platform view', () async {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -728,7 +729,7 @@ void testMain() {
'removes old SVG clip definitions from the DOM when the view is recomposited',
() async {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'test-view',
);
Expand Down Expand Up @@ -763,7 +764,7 @@ void testMain() {
test('does not crash when a prerolled platform view is not composited',
() async {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand All @@ -784,7 +785,7 @@ void testMain() {
test('does not crash when overlays are disabled', () async {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
HtmlViewEmbedder.debugDisableOverlays = true;
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -817,7 +818,7 @@ void testMain() {
expect(SurfaceFactory.instance.maximumSurfaces, 2);
expect(SurfaceFactory.instance.maximumOverlays, 1);

ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -861,7 +862,7 @@ void testMain() {
'of views is used', () async {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
HtmlViewEmbedder.debugDisableOverlays = true;
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down Expand Up @@ -897,11 +898,11 @@ void testMain() {

test('does not create overlays for invisible platform views', () async {
final Rasterizer rasterizer = CanvasKitRenderer.instance.rasterizer;
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-visible-view',
(int viewId) =>
createDomHTMLDivElement()..className = 'visible-platform-view');
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-invisible-view',
(int viewId) =>
createDomHTMLDivElement()..className = 'invisible-platform-view',
Expand Down
3 changes: 2 additions & 1 deletion lib/web_ui/test/canvaskit/image_golden_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine.dart';
import 'package:ui/ui.dart' as ui;
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
import 'package:web_engine_tester/golden_tester.dart';

import '../common/matchers.dart';
Expand Down Expand Up @@ -653,7 +654,7 @@ void _testForImageCodecs({required bool useBrowserImageDecoder}) {
// * https://github.com/flutter/flutter/issues/86809
// * https://github.com/flutter/flutter/issues/91881
test('the same image can be rendered on difference surfaces', () async {
ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()..id = 'view-0',
);
Expand Down
3 changes: 2 additions & 1 deletion lib/web_ui/test/engine/semantics/semantics_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'package:test/test.dart';

import 'package:ui/src/engine.dart';
import 'package:ui/ui.dart' as ui;
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;

import 'semantics_tester.dart';

Expand Down Expand Up @@ -1929,7 +1930,7 @@ void _testPlatformView() {
..debugOverrideTimestampFunction(() => _testTime)
..semanticsEnabled = true;

ui.platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-platform-view',
(int viewId) => createDomHTMLDivElement()
..id = 'view-0'
Expand Down
5 changes: 3 additions & 2 deletions lib/web_ui/test/engine/surface/platform_view_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:test/bootstrap/browser.dart';
import 'package:test/test.dart';
import 'package:ui/src/engine.dart';
import 'package:ui/ui.dart';
import 'package:ui/ui_web/src/ui_web.dart' as ui_web;

import '../../common/matchers.dart';

Expand All @@ -25,11 +26,11 @@ Future<void> testMain() async {

group('PersistedPlatformView', () {
setUp(() async {
platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-0',
(int viewId) => createDomHTMLDivElement(),
);
platformViewRegistry.registerViewFactory(
ui_web.platformViewRegistry.registerViewFactory(
'test-1',
(int viewId) => createDomHTMLDivElement(),
);
Expand Down
15 changes: 8 additions & 7 deletions web_sdk/sdk_rewriter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,20 @@ final ArgParser argParser = ArgParser()
final List<Replacer> uiPatterns = <Replacer>[
AllReplacer(RegExp(r'library\s+ui;'), 'library dart.ui;'),
AllReplacer(RegExp(r'part\s+of\s+ui;'), 'part of dart.ui;'),

// import 'src/engine.dart' as engine;
AllReplacer(RegExp(r'''
import\s*'src/engine.dart'\s*as\s+engine;
'''), r'''
import 'dart:_engine' as engine;
'''),
AllReplacer(RegExp(
r'''
export\s*'src/engine.dart'

// import 'ui_web/src/ui_web.dart' as ui_web;
AllReplacer(RegExp(r'''
import\s*'ui_web/src/ui_web.dart'\s*as\s+ui_web;
'''), r'''
import 'dart:ui_web' as ui_web;
'''),
r'''
export 'dart:_engine'
''',
),
];

List<Replacer> generateApiFilePatterns(String libraryName, bool isPublic, List<String> extraImports) {
Expand Down