[web] Cleanup everything HTML from the engine (outside html/ folder) (#162840)

Things being cleaned up:

- Remove `flutter.js` support for HTML/AUTO renderers.
- Delete the renderer auto-detection logic and flag.
- Remove references to the `HtmlRenderer` from renderer-agnostic code.
- Remove the `auto-selected`/`requested explicitly` info from the DOM.

As a follow up to this, I'll create another PR that deletes the entire
`html/` folder.
This commit is contained in:
Mouad Debbar 2025-02-18 16:28:24 -05:00 committed by GitHub
parent db0bdfd117
commit 4be1b57d50
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 14 additions and 69 deletions

View File

@ -92,13 +92,7 @@ export class FlutterLoader {
* @param {import("./types").WebRenderer} renderer
**/
const buildContainsRenderer = (build, renderer) => {
switch (build.renderer) {
// The "auto" build contains both canvaskit and html renderers.
case "auto":
return renderer == "canvaskit" || renderer == "html";
default:
return build.renderer == renderer;
}
return build.renderer == renderer;
}
const buildIsCompatible = (build) => {

View File

@ -8,8 +8,6 @@ type WasmCompileTarget = "dart2wasm";
export type CompileTarget = JSCompileTarget | WasmCompileTarget;
export type WebRenderer =
"auto" |
"html" |
"canvaskit" |
"skwasm";

View File

@ -172,12 +172,6 @@ class FlutterConfiguration {
// runtime. They must be static constants for the compiler to remove dead code
// effectively.
/// Auto detect which rendering backend to use.
///
/// Using flutter tools option "--web-renderer=auto" would set the value to
/// true. Otherwise, it would be false.
static const bool flutterWebAutoDetect = bool.fromEnvironment('FLUTTER_WEB_AUTO_DETECT');
static const bool flutterWebUseSkwasm = bool.fromEnvironment('FLUTTER_WEB_USE_SKWASM');
/// Enable the Skia-based rendering backend.

View File

@ -39,9 +39,7 @@ abstract class HtmlImageElementCodec implements ui.Codec {
// builders to create UI.
chunkCallback?.call(0, 100);
imgElement = createDomHTMLImageElement();
if (renderer is! HtmlRenderer) {
imgElement!.crossOrigin = 'anonymous';
}
imgElement!.crossOrigin = 'anonymous';
imgElement!
..decoding = 'async'
..src = src;

View File

@ -190,12 +190,7 @@ Future<void> initializeEngineUi() async {
ensureMetaTag('generator', 'Flutter');
if (!configuration.multiViewEnabled) {
final EngineFlutterWindow implicitView = ensureImplicitViewInitialized(
hostElement: configuration.hostElement,
);
if (renderer is HtmlRenderer) {
ensureResourceManagerInitialized(implicitView);
}
ensureImplicitViewInitialized(hostElement: configuration.hostElement);
}
_initializationState = DebugEngineInitializationState.initialized;
}

View File

@ -25,35 +25,13 @@ abstract class Renderer {
factory Renderer._internal() {
if (FlutterConfiguration.flutterWebUseSkwasm) {
return SkwasmRenderer();
} else if (FlutterConfiguration.useSkia) {
return CanvasKitRenderer();
} else {
bool useCanvasKit;
if (FlutterConfiguration.flutterWebAutoDetect) {
if (configuration.requestedRendererType != null) {
useCanvasKit = configuration.requestedRendererType == 'canvaskit';
} else {
// If requestedRendererType is not specified, use CanvasKit for desktop and
// html for mobile.
useCanvasKit = isDesktop;
}
} else {
useCanvasKit = FlutterConfiguration.useSkia;
}
// Warn users in development that anything other than canvaskit is deprecated.
assert(() {
if (!useCanvasKit) {
// The user requested 'html' or 'auto' either in the command-line or JS.
final String requested =
configuration.requestedRendererType ??
(FlutterConfiguration.flutterWebAutoDetect ? 'auto' : 'html');
printWarning(
'The HTML Renderer is being deprecated. Stop using the "$requested" renderer mode.'
'\nSee: https://docs.flutter.dev/to/web-html-renderer-deprecation',
);
}
return true;
}());
return useCanvasKit ? CanvasKitRenderer() : HtmlRenderer();
throw StateError(
'Wrong combination of configuration flags. Was expecting either CanvasKit or Skwasm to be '
'selected.',
);
}
}

View File

@ -25,7 +25,6 @@ class GlobalHtmlAttributes {
void applyAttributes({
required int viewId,
required bool autoDetectRenderer,
required String rendererTag,
required String buildMode,
}) {
@ -39,10 +38,7 @@ class GlobalHtmlAttributes {
// document.querySelector('flutter-view[flt-view-id="$viewId"]')
rootElement.setAttribute(flutterViewIdAttributeName, viewId);
// How was the current renderer selected?
final String rendererSelection = autoDetectRenderer ? 'auto-selected' : 'requested explicitly';
hostElement.setAttribute('flt-renderer', '$rendererTag ($rendererSelection)');
hostElement.setAttribute('flt-renderer', rendererTag);
hostElement.setAttribute('flt-build-mode', buildMode);
// TODO(mdebbar): Disable spellcheck until changes in the framework and
// engine are complete.

View File

@ -11,7 +11,6 @@ import 'package:ui/ui_web/src/ui_web.dart' as ui_web;
import '../engine.dart' show DimensionsProvider, registerHotRestartListener, renderer;
import 'browser_detection.dart';
import 'configuration.dart';
import 'display.dart';
import 'dom.dart';
import 'initialization.dart';
@ -73,7 +72,6 @@ class EngineFlutterView implements ui.FlutterView {
_resizeSubscription = onResize.listen(_didResize);
_globalHtmlAttributes.applyAttributes(
viewId: viewId,
autoDetectRenderer: FlutterConfiguration.flutterWebAutoDetect,
rendererTag: renderer.rendererTag,
buildMode: buildMode,
);

View File

@ -22,25 +22,19 @@ void doTests() {
globalHtmlAttributes.applyAttributes(
viewId: 123,
autoDetectRenderer: true,
rendererTag: 'canvaskit',
buildMode: 'release',
);
expect(rootElement.getAttribute('flt-view-id'), '123');
expect(hostElement.getAttribute('flt-renderer'), 'canvaskit (auto-selected)');
expect(hostElement.getAttribute('flt-renderer'), 'canvaskit');
expect(hostElement.getAttribute('flt-build-mode'), 'release');
expect(hostElement.getAttribute('spellcheck'), 'false');
globalHtmlAttributes.applyAttributes(
viewId: 456,
autoDetectRenderer: false,
rendererTag: 'html',
buildMode: 'debug',
);
globalHtmlAttributes.applyAttributes(viewId: 456, rendererTag: 'skwasm', buildMode: 'debug');
expect(rootElement.getAttribute('flt-view-id'), '456');
expect(hostElement.getAttribute('flt-renderer'), 'html (requested explicitly)');
expect(hostElement.getAttribute('flt-renderer'), 'skwasm');
expect(hostElement.getAttribute('flt-build-mode'), 'debug');
expect(hostElement.getAttribute('spellcheck'), 'false');
});

View File

@ -551,7 +551,7 @@ Future<void> testMain() async {
final DomElement host = createDomHTMLDivElement();
final EngineFlutterView view = EngineFlutterView(dispatcher, host);
expect(host.getAttribute('flt-renderer'), 'canvaskit (requested explicitly)');
expect(host.getAttribute('flt-renderer'), 'canvaskit');
expect(host.getAttribute('flt-build-mode'), 'debug');
view.dispose();