[web] CL 1 (#32689)

diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter
index 5ba213f..bd363d1 100644
--- a/ci/licenses_golden/licenses_flutter
+++ b/ci/licenses_golden/licenses_flutter
@@ -983,6 +983,7 @@
 FILE: ../../../flutter/lib/web_ui/lib/src/engine/clipboard.dart
 FILE: ../../../flutter/lib/web_ui/lib/src/engine/color_filter.dart
 FILE: ../../../flutter/lib/web_ui/lib/src/engine/configuration.dart
+FILE: ../../../flutter/lib/web_ui/lib/src/engine/dom.dart
 FILE: ../../../flutter/lib/web_ui/lib/src/engine/embedder.dart
 FILE: ../../../flutter/lib/web_ui/lib/src/engine/engine_canvas.dart
 FILE: ../../../flutter/lib/web_ui/lib/src/engine/font_change_util.dart
diff --git a/lib/web_ui/lib/src/engine.dart b/lib/web_ui/lib/src/engine.dart
index fedb084..9961367 100644
--- a/lib/web_ui/lib/src/engine.dart
+++ b/lib/web_ui/lib/src/engine.dart
@@ -55,6 +55,7 @@
 export 'engine/clipboard.dart';
 export 'engine/color_filter.dart';
 export 'engine/configuration.dart';
+export 'engine/dom.dart';
 export 'engine/embedder.dart';
 export 'engine/engine_canvas.dart';
 export 'engine/font_change_util.dart';
diff --git a/lib/web_ui/lib/src/engine/assets.dart b/lib/web_ui/lib/src/engine/assets.dart
index a352a2a..439983b 100644
--- a/lib/web_ui/lib/src/engine/assets.dart
+++ b/lib/web_ui/lib/src/engine/assets.dart
@@ -6,6 +6,7 @@
 import 'dart:html' as html;
 import 'dart:typed_data';
 
+import 'dom.dart';
 import 'text/font_collection.dart';
 import 'util.dart';
 
@@ -23,10 +24,13 @@
   const AssetManager({this.assetsDir = _defaultAssetsDir});
 
   String? get _baseUrl {
-    return html.window.document
+    return domWindow.document
         .querySelectorAll('meta')
-        .whereType<html.MetaElement>()
-        .firstWhereOrNull((html.MetaElement element) => element.name == 'assetBase')
+        .where((Object? domNode) => domInstanceOfString(domNode,
+                'HTMLMetaElement'))
+        .map((Object? domNode) => domNode! as DomHTMLMetaElement)
+        .firstWhereOrNull(
+            (DomHTMLMetaElement element) => element.name == 'assetBase')
         ?.content;
   }
 
@@ -83,6 +87,7 @@
 class AssetManagerException implements Exception {
   /// Http request url for asset.
   final String url;
+
   /// Http status of response.
   final int httpStatus;
 
@@ -97,8 +102,10 @@
 class WebOnlyMockAssetManager implements AssetManager {
   /// Mock asset directory relative to base url.
   String defaultAssetsDir = '';
+
   /// Mock empty asset manifest.
   String defaultAssetManifest = '{}';
+
   /// Mock font manifest overridable for unit testing.
   String defaultFontManifest = '''
   [
diff --git a/lib/web_ui/lib/src/engine/dom.dart b/lib/web_ui/lib/src/engine/dom.dart
new file mode 100644
index 0000000..58feade
--- /dev/null
+++ b/lib/web_ui/lib/src/engine/dom.dart
@@ -0,0 +1,53 @@
+// 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:js/js.dart';
+import 'package:js/js_util.dart' as js_util;
+
+@JS()
+@staticInterop
+class DomWindow {}
+
+extension DomWindowExtension on DomWindow {
+  external DomDocument get document;
+}
+
+@JS('window')
+external DomWindow get domWindow;
+
+@JS()
+@staticInterop
+class DomDocument {}
+
+extension DomDocumentExtension on DomDocument {
+  external /* List<Node> */ List<Object?> querySelectorAll(String selectors);
+}
+
+@JS()
+@staticInterop
+class DomEventTarget {}
+
+@JS()
+@staticInterop
+class DomNode extends DomEventTarget {}
+
+@JS()
+@staticInterop
+class DomHTMLElement extends DomNode {}
+
+@JS()
+@staticInterop
+class DomHTMLMetaElement {}
+
+extension DomHTMLMetaElementExtension on DomHTMLMetaElement {
+  external String get name;
+  external String get content;
+  external set name(String value);
+}
+
+Object? domGetConstructor(String constructorName) =>
+    js_util.getProperty(domWindow, constructorName);
+
+bool domInstanceOfString(Object? element, String objectType) =>
+    js_util.instanceof(element, domGetConstructor(objectType)!);