Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

[web] Render in custom target #37738

Merged
merged 58 commits into from
Dec 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
0c265d1
Introduce FullScreenApplicationDom, and wire it to meta viewport, eve…
ditman Nov 11, 2022
87f1c91
Move internal stylesheet to HostNode from ViewEmbedder.
ditman Nov 16, 2022
9dd964b
Add setHostStyles and Attribute to ApplicationDom. Use it in the embe…
ditman Nov 16, 2022
48ddb1b
Move HotRestartCacheHandler to its own file.
ditman Nov 16, 2022
ca8db3e
Remove Safari hack for visualViewport.
ditman Nov 16, 2022
9b88880
No need to keep a ref to the viewport meta in full-screen.
ditman Nov 16, 2022
7cc8cf3
Add applicationDom.attachGlassPane and use it in the Embedder.
ditman Nov 16, 2022
10cf86e
Remove empty method bodies.
ditman Nov 16, 2022
58fb7d5
Add attachResourcesHost and use it from the embedder.
ditman Nov 17, 2022
769b4b6
Removed some unused code.
ditman Nov 17, 2022
eac7d73
Some more cleanup.
ditman Nov 17, 2022
b43417d
Add ResizeObserver JS interop API.
ditman Nov 18, 2022
140d7cf
Add the CustomElementApplicationDom and wire it to the ViewEmbedder.
ditman Nov 18, 2022
ddc9c9c
Add the DimensionsProvider classes.
ditman Nov 18, 2022
f798750
Reimplement engine.window using the DimensionsProvider.
ditman Nov 18, 2022
1064d64
Delegate window metrics to engine window in html scene object.
ditman Nov 18, 2022
8d618d7
Wire DimensionsProvider into engine.window.
ditman Nov 18, 2022
d40ecb4
Moved ApplicationDom into its own subdir.
ditman Nov 18, 2022
77cd76a
Make DimensionsProvider also an Observer. Expose onResize Stream.
ditman Nov 24, 2022
0c9d2c0
Delegate onResize and dpr from window to DimensionsObserver object.
ditman Nov 24, 2022
6fba209
Remove or make most ApplicationDom methods private. Expose single ini…
ditman Nov 24, 2022
86d1c74
Hook the new API.
ditman Nov 24, 2022
c30f13e
dart format
ditman Nov 24, 2022
6fbdbd3
ApplicationDom -> EmbeddingStrategy.
ditman Nov 29, 2022
19b5cf2
Attach pointer move events to glassPaneElement
ditman Nov 30, 2022
641bba7
Use offset positions for mouse events (relative to host element) rath…
ditman Nov 30, 2022
f773333
Update TouchAdapter to understand scrolling (simulate offsetX/Y)
ditman Nov 30, 2022
d3cf9d3
Remove locale change handling from the embedding strategy.
ditman Nov 30, 2022
5a180db
Move locale handling from the embedder to the platform dispatcher
ditman Nov 30, 2022
74f639f
Move some styles from host to glassPane so we are more friendly with …
ditman Nov 30, 2022
dee3f54
Make analyzer fixes
ditman Nov 30, 2022
1811c17
Ensure DimensionsProvider is available in tests.
ditman Nov 30, 2022
0d89e8e
Initialize the view DimensionsProvider next to where the EmbeddingStr…
ditman Dec 1, 2022
44725be
Bring back the logic to support Firefox 83.
ditman Dec 1, 2022
649116a
Fix pointer_binding test for new anchor point in the DOM.
ditman Dec 2, 2022
9d3c903
Fix pointer_binding_test in Firefox.
ditman Dec 6, 2022
3b69e0b
Add an iterable way of accessing 'rules'
ditman Dec 6, 2022
f217f9d
Merge latest changes to host_node stylesheet.
ditman Dec 6, 2022
5d469b1
Format test
ditman Dec 6, 2022
4cc8ce6
Try to use insertRule for -ms-reveal, and fallback in tests.
ditman Dec 6, 2022
264e3a4
Test hot_restart_cache_handler
ditman Dec 7, 2022
be99c2a
Test dimensions_provider.
ditman Dec 7, 2022
3eb9321
Test full_page_dimensions_provider
ditman Dec 8, 2022
9019df4
Test custom_element_dimensions_provider
ditman Dec 8, 2022
8834630
Test embedding_strategy. Make getDomCache util public.
ditman Dec 8, 2022
079d201
Fixes and tests for *_embedding_strategy.
ditman Dec 8, 2022
9a6702b
Move default text colors to our innermost style inside host_node (app…
ditman Dec 8, 2022
f4ff288
Safari expands shorthand properties in CSSOM.
ditman Dec 8, 2022
42e4298
Add computeEventOffsetToTarget function, and use it.
ditman Dec 14, 2022
a7447ac
Address PR comments.
ditman Dec 15, 2022
d1b93ba
Update licenses_flutter.
ditman Dec 15, 2022
5e48d3d
Remove DomCSSRuleList class and instead use Iterable of DomCSSRule
ditman Dec 17, 2022
53de810
Make the embeddingStrategy final instead of late
ditman Dec 17, 2022
0a817a6
Attach mouse/pointermove events to domWindow.
ditman Dec 17, 2022
b293d36
Rename DimensionsProvider.onHotRestart to .close, and slightly improv…
ditman Dec 17, 2022
76cec66
Fix compute physicalX/Y for TalkBack events.
ditman Dec 21, 2022
b48b397
Clarify what does (and does not) support 3D transforms in the event_p…
ditman Dec 22, 2022
57dc432
Update licenses file
ditman Dec 22, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions ci/licenses_golden/licenses_flutter
Original file line number Diff line number Diff line change
Expand Up @@ -1962,6 +1962,7 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/platform_views/message_handle
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/platform_views/slots.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/plugins.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/pointer_binding.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/pointer_binding/event_position_helper.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/pointer_converter.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/profiler.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/raw_keyboard.dart + ../../../flutter/LICENSE
Expand Down Expand Up @@ -2017,6 +2018,13 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/ulps.dart + ../../../flutter/
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/util.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/validators.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/vector_math.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/dimensions_provider/custom_element_dimensions_provider.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/dimensions_provider/dimensions_provider.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/dimensions_provider/full_page_dimensions_provider.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/embedding_strategy/custom_element_embedding_strategy.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/embedding_strategy/embedding_strategy.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/embedding_strategy/full_page_embedding_strategy.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/hot_restart_cache_handler.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/window.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/text.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/tile_mode.dart + ../../../flutter/LICENSE
Expand Down Expand Up @@ -4413,6 +4421,7 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/platform_views/message_handler.
FILE: ../../../flutter/lib/web_ui/lib/src/engine/platform_views/slots.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/plugins.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/pointer_binding.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/pointer_binding/event_position_helper.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/pointer_converter.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/profiler.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/raw_keyboard.dart
Expand Down Expand Up @@ -4468,6 +4477,13 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/ulps.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/util.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/validators.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/vector_math.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/dimensions_provider/custom_element_dimensions_provider.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/dimensions_provider/dimensions_provider.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/dimensions_provider/full_page_dimensions_provider.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/embedding_strategy/custom_element_embedding_strategy.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/embedding_strategy/embedding_strategy.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/embedding_strategy/full_page_embedding_strategy.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/view_embedder/hot_restart_cache_handler.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/window.dart
FILE: ../../../flutter/lib/web_ui/lib/text.dart
FILE: ../../../flutter/lib/web_ui/lib/tile_mode.dart
Expand Down
8 changes: 8 additions & 0 deletions lib/web_ui/lib/src/engine.dart
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ export 'engine/platform_views/message_handler.dart';
export 'engine/platform_views/slots.dart';
export 'engine/plugins.dart';
export 'engine/pointer_binding.dart';
export 'engine/pointer_binding/event_position_helper.dart';
export 'engine/pointer_converter.dart';
export 'engine/profiler.dart';
export 'engine/raw_keyboard.dart';
Expand Down Expand Up @@ -170,4 +171,11 @@ export 'engine/text_editing/text_editing.dart';
export 'engine/util.dart';
export 'engine/validators.dart';
export 'engine/vector_math.dart';
export 'engine/view_embedder/dimensions_provider/custom_element_dimensions_provider.dart';
export 'engine/view_embedder/dimensions_provider/dimensions_provider.dart';
export 'engine/view_embedder/dimensions_provider/full_page_dimensions_provider.dart';
export 'engine/view_embedder/embedding_strategy/custom_element_embedding_strategy.dart';
export 'engine/view_embedder/embedding_strategy/embedding_strategy.dart';
export 'engine/view_embedder/embedding_strategy/full_page_embedding_strategy.dart';
export 'engine/view_embedder/hot_restart_cache_handler.dart';
export 'engine/window.dart';
86 changes: 82 additions & 4 deletions lib/web_ui/lib/src/engine/dom.dart
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ class DomEvent {}

extension DomEventExtension on DomEvent {
external DomEventTarget? get target;
external DomEventTarget? get currentTarget;
external double? get timeStamp;
external String get type;
external void preventDefault();
Expand Down Expand Up @@ -461,6 +462,9 @@ class DomHTMLElement extends DomElement {}

extension DomHTMLElementExtension on DomHTMLElement {
external double get offsetWidth;
external double get offsetLeft;
external double get offsetTop;
external DomHTMLElement? get offsetParent;
}

@JS()
Expand Down Expand Up @@ -1089,6 +1093,8 @@ extension DomMouseEventExtension on DomMouseEvent {
external double get clientY;
external double get offsetX;
external double get offsetY;
external double get pageX;
external double get pageY;
DomPoint get client => DomPoint(clientX, clientY);
DomPoint get offset => DomPoint(offsetX, offsetY);
external double get button;
Expand Down Expand Up @@ -1312,7 +1318,10 @@ class DomStyleSheet {}
class DomCSSStyleSheet extends DomStyleSheet {}

extension DomCSSStyleSheetExtension on DomCSSStyleSheet {
external DomCSSRuleList get cssRules;
Iterable<DomCSSRule> get cssRules =>
createDomListWrapper<DomCSSRule>(js_util
.getProperty<_DomList>(this, 'cssRules'));

double insertRule(String rule, [int? index]) => js_util
.callMethod<double>(
this, 'insertRule',
Expand All @@ -1323,6 +1332,12 @@ extension DomCSSStyleSheetExtension on DomCSSStyleSheet {
@staticInterop
class DomCSSRule {}

@JS()
@staticInterop
extension DomCSSRuleExtension on DomCSSRule {
external String get cssText;
}

@JS()
@staticInterop
class DomScreen {}
Expand Down Expand Up @@ -1420,12 +1435,75 @@ extension DomMessageChannelExtension on DomMessageChannel {
external DomMessagePort get port2;
}

/// ResizeObserver JS binding.
///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver
@JS()
@staticInterop
class DomCSSRuleList {}
abstract class DomResizeObserver {}

extension DomCSSRuleListExtension on DomCSSRuleList {
external double get length;
/// Creates a DomResizeObserver with a callback.
///
/// Internally converts the `List<dynamic>` of entries into the expected
/// `List<DomResizeObserverEntry>`
DomResizeObserver? createDomResizeObserver(DomResizeObserverCallbackFn fn) {
return domCallConstructorString('ResizeObserver', <Object?>[
allowInterop(
(List<dynamic> entries, DomResizeObserver observer) {
fn(entries.cast<DomResizeObserverEntry>(), observer);
}
),
]) as DomResizeObserver?;
}

/// ResizeObserver instance methods.
///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver#instance_methods
extension DomResizeObserverExtension on DomResizeObserver {
external void disconnect();
external void observe(DomElement target, [DomResizeObserverObserveOptions options]);
external void unobserve(DomElement target);
}

/// Options object passed to the `observe` method of a [DomResizeObserver].
///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver/observe#parameters
@JS()
@staticInterop
@anonymous
abstract class DomResizeObserverObserveOptions {
external factory DomResizeObserverObserveOptions({
String box,
});
}

/// Type of the function used to create a Resize Observer.
typedef DomResizeObserverCallbackFn = void Function(List<DomResizeObserverEntry> entries, DomResizeObserver observer);

/// The object passed to the [DomResizeObserverCallbackFn], which allows access to the new dimensions of the observed element.
///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry
@JS()
@staticInterop
abstract class DomResizeObserverEntry {}

/// ResizeObserverEntry instance properties.
///
/// See: https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserverEntry#instance_properties
extension DomResizeObserverEntryExtension on DomResizeObserverEntry {
/// A DOMRectReadOnly object containing the new size of the observed element when the callback is run.
///
/// Note that this is better supported than the above two properties, but it
/// is left over from an earlier implementation of the Resize Observer API, is
/// still included in the spec for web compat reasons, and may be deprecated
/// in future versions.
external DomRectReadOnly get contentRect;
external DomElement get target;
// Some more future getters:
//
// borderBoxSize
// contentBoxSize
// devicePixelContentBoxSize
}

/// A factory to create `TrustedTypePolicy` objects.
Expand Down
Loading