Skip to content

Commit dc2a7da

Browse files
authored
[web] CL 1 (flutter#32689)
1 parent 966757c commit dc2a7da

File tree

4 files changed

+65
-3
lines changed

4 files changed

+65
-3
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -983,6 +983,7 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/viewport_metrics.dart
983983
FILE: ../../../flutter/lib/web_ui/lib/src/engine/clipboard.dart
984984
FILE: ../../../flutter/lib/web_ui/lib/src/engine/color_filter.dart
985985
FILE: ../../../flutter/lib/web_ui/lib/src/engine/configuration.dart
986+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/dom.dart
986987
FILE: ../../../flutter/lib/web_ui/lib/src/engine/embedder.dart
987988
FILE: ../../../flutter/lib/web_ui/lib/src/engine/engine_canvas.dart
988989
FILE: ../../../flutter/lib/web_ui/lib/src/engine/font_change_util.dart

lib/web_ui/lib/src/engine.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export 'engine/canvaskit/vertices.dart';
5555
export 'engine/clipboard.dart';
5656
export 'engine/color_filter.dart';
5757
export 'engine/configuration.dart';
58+
export 'engine/dom.dart';
5859
export 'engine/embedder.dart';
5960
export 'engine/engine_canvas.dart';
6061
export 'engine/font_change_util.dart';

lib/web_ui/lib/src/engine/assets.dart

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:convert';
66
import 'dart:html' as html;
77
import 'dart:typed_data';
88

9+
import 'dom.dart';
910
import 'text/font_collection.dart';
1011
import 'util.dart';
1112

@@ -23,10 +24,13 @@ class AssetManager {
2324
const AssetManager({this.assetsDir = _defaultAssetsDir});
2425

2526
String? get _baseUrl {
26-
return html.window.document
27+
return domWindow.document
2728
.querySelectorAll('meta')
28-
.whereType<html.MetaElement>()
29-
.firstWhereOrNull((html.MetaElement element) => element.name == 'assetBase')
29+
.where((Object? domNode) => domInstanceOfString(domNode,
30+
'HTMLMetaElement'))
31+
.map((Object? domNode) => domNode! as DomHTMLMetaElement)
32+
.firstWhereOrNull(
33+
(DomHTMLMetaElement element) => element.name == 'assetBase')
3034
?.content;
3135
}
3236

@@ -83,6 +87,7 @@ class AssetManager {
8387
class AssetManagerException implements Exception {
8488
/// Http request url for asset.
8589
final String url;
90+
8691
/// Http status of response.
8792
final int httpStatus;
8893

@@ -97,8 +102,10 @@ class AssetManagerException implements Exception {
97102
class WebOnlyMockAssetManager implements AssetManager {
98103
/// Mock asset directory relative to base url.
99104
String defaultAssetsDir = '';
105+
100106
/// Mock empty asset manifest.
101107
String defaultAssetManifest = '{}';
108+
102109
/// Mock font manifest overridable for unit testing.
103110
String defaultFontManifest = '''
104111
[

lib/web_ui/lib/src/engine/dom.dart

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:js/js.dart';
6+
import 'package:js/js_util.dart' as js_util;
7+
8+
@JS()
9+
@staticInterop
10+
class DomWindow {}
11+
12+
extension DomWindowExtension on DomWindow {
13+
external DomDocument get document;
14+
}
15+
16+
@JS('window')
17+
external DomWindow get domWindow;
18+
19+
@JS()
20+
@staticInterop
21+
class DomDocument {}
22+
23+
extension DomDocumentExtension on DomDocument {
24+
external /* List<Node> */ List<Object?> querySelectorAll(String selectors);
25+
}
26+
27+
@JS()
28+
@staticInterop
29+
class DomEventTarget {}
30+
31+
@JS()
32+
@staticInterop
33+
class DomNode extends DomEventTarget {}
34+
35+
@JS()
36+
@staticInterop
37+
class DomHTMLElement extends DomNode {}
38+
39+
@JS()
40+
@staticInterop
41+
class DomHTMLMetaElement {}
42+
43+
extension DomHTMLMetaElementExtension on DomHTMLMetaElement {
44+
external String get name;
45+
external String get content;
46+
external set name(String value);
47+
}
48+
49+
Object? domGetConstructor(String constructorName) =>
50+
js_util.getProperty(domWindow, constructorName);
51+
52+
bool domInstanceOfString(Object? element, String objectType) =>
53+
js_util.instanceof(element, domGetConstructor(objectType)!);

0 commit comments

Comments
 (0)