Skip to content

Commit

Permalink
dpwas:Add ongeometrychange event to WindowControlsOverlay
Browse files Browse the repository at this point in the history
For PWAs with WindowControlsOverlay, This CL adds an ongeometrychange
event for whenever the overlay bounds or visibility changes to notify
the app. An example of changing bounds would be when the app is
launched, the app origin is displayed and then hidden.

Explainer: https://github.com/WICG/window-controls-overlay/blob/master/explainer.md
Design Doc: https://docs.google.com/document/d/1k0YL_-VMLIfjYCgJ2v6cMvuUv2qMKg4BgLI2tJ4qtyo/edit?usp=sharing
I2P: https://groups.google.com/a/chromium.org/forum/#!msg/blink-dev/cper6nNLFRQ/hU91kfCWBQAJ

Bug: 937121
Change-Id: Ic0f6e76883d3ec5fc98f8d1bf734e72aa49de2c2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2686584
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Hassan Talat <hatalat@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#859080}
  • Loading branch information
htalat authored and Chromium LUCI CQ committed Mar 2, 2021
1 parent b9c28d2 commit 469a000
Show file tree
Hide file tree
Showing 17 changed files with 368 additions and 150 deletions.
43 changes: 43 additions & 0 deletions content/browser/web_contents/web_contents_impl_browsertest.cc
Expand Up @@ -4593,4 +4593,47 @@ IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTestWindowControlsOverlay,
ValidateTitlebarAreaInsetValue("margin-top", "2px");
ValidateTitlebarAreaInsetValue("margin-bottom", "2px");
}

IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTestWindowControlsOverlay,
GeometryChangeEvent) {
auto* web_contents = shell()->web_contents();

GURL url(url::kAboutBlankURL);
EXPECT_TRUE(NavigateToURL(shell(), url));
EXPECT_TRUE(ExecuteScript(
web_contents->GetMainFrame(),
"geometrychangeCount = 0;"
"navigator.windowControlsOverlay.ongeometrychange = (e) => {"
" geometrychangeCount++;"
" rect = e.boundingRect;"
" visible = e.visible;"
"}"));

WaitForLoadStop(web_contents);

// Ensure the "geometrychange" event is only fired when the the window
// controls overlay bounds are updated.
EXPECT_EQ(0, EvalJs(web_contents, "geometrychangeCount"));

// information about the bounds should be updated
int x = 2;
int y = 2;
int width = 2;
int height = 2;

gfx::Rect bounding_client_rect = gfx::Rect(x, y, width, height);
gfx::Insets insets = gfx::Insets(0, 0, 0, 0);

web_contents->UpdateWindowControlsOverlay(bounding_client_rect, insets);

// Expect the "geometrychange" event to have fired once.
EXPECT_EQ(1, EvalJs(web_contents, "geometrychangeCount"));

// Validate the event payload.
EXPECT_EQ(true, EvalJs(web_contents, "visible"));
EXPECT_EQ(x, EvalJs(web_contents, "rect.x;"));
EXPECT_EQ(y, EvalJs(web_contents, "rect.y"));
EXPECT_EQ(width, EvalJs(web_contents, "rect.width"));
EXPECT_EQ(height, EvalJs(web_contents, "rect.height"));
}
} // namespace content
4 changes: 4 additions & 0 deletions third_party/blink/renderer/bindings/generated_in_core.gni
Expand Up @@ -351,6 +351,8 @@ generated_dictionary_sources_in_core = [
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_validity_state_flags.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_wheel_event_init.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_wheel_event_init.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay_geometry_change_event_init.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay_geometry_change_event_init.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_post_message_options.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_post_message_options.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker_options.cc",
Expand Down Expand Up @@ -1401,6 +1403,8 @@ generated_interface_sources_in_core = [
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay_geometry_change_event.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_window_controls_overlay_geometry_change_event.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker.cc",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker.h",
"$root_gen_dir/third_party/blink/renderer/bindings/core/v8/v8_worker_global_scope.cc",
Expand Down
2 changes: 2 additions & 0 deletions third_party/blink/renderer/bindings/idl_in_core.gni
Expand Up @@ -300,6 +300,8 @@ static_idl_files_in_core = get_path_info(
"//third_party/blink/renderer/core/frame/window_event_handlers.idl",
"//third_party/blink/renderer/core/frame/window_or_worker_global_scope.idl",
"//third_party/blink/renderer/core/frame/window_post_message_options.idl",
"//third_party/blink/renderer/core/frame/window_controls_overlay_geometry_change_event.idl",
"//third_party/blink/renderer/core/frame/window_controls_overlay_geometry_change_event_init.idl",
"//third_party/blink/renderer/core/fullscreen/document_fullscreen.idl",
"//third_party/blink/renderer/core/fullscreen/element_fullscreen.idl",
"//third_party/blink/renderer/core/fullscreen/fullscreen_options.idl",
Expand Down
289 changes: 146 additions & 143 deletions third_party/blink/renderer/core/core_idl_files.gni
Expand Up @@ -206,6 +206,7 @@ core_interface_idl_files_core_only =
"frame/user_activation.idl",
"frame/visual_viewport.idl",
"frame/window_controls_overlay.idl",
"frame/window_controls_overlay_geometry_change_event.idl",
"geometry/dom_matrix.idl",
"geometry/dom_matrix_read_only.idl",
"geometry/dom_point.idl",
Expand Down Expand Up @@ -635,149 +636,151 @@ core_callback_interface_idl_files =
"abspath")

core_dictionary_idl_files =
get_path_info([
"animation/base_keyframe.idl",
"animation/base_property_indexed_keyframe.idl",
"animation/computed_effect_timing.idl",
"animation/document_timeline_options.idl",
"animation/effect_timing.idl",
"animation/get_animations_options.idl",
"animation/keyframe_animation_options.idl",
"animation/keyframe_effect_options.idl",
"animation/optional_effect_timing.idl",
"animation/scroll_timeline_element_based_offset.idl",
"animation/scroll_timeline_options.idl",
"css/css_style_sheet_init.idl",
"css/font_face_descriptors.idl",
"css/font_face_set_load_event_init.idl",
"css/media_query_list_event_init.idl",
"css/property_definition.idl",
"css/cssom/css_matrix_component_options.idl",
"css/cssom/css_numeric_type.idl",
"document_transition/document_transition_init.idl",
"dom/element_creation_options.idl",
"dom/element_definition_options.idl",
"dom/element_registration_options.idl",
"dom/get_inner_html_options.idl",
"dom/get_root_node_options.idl",
"dom/idle_request_options.idl",
"dom/interest_cohort.idl",
"dom/mutation_observer_init.idl",
"dom/pointer_lock_options.idl",
"dom/shadow_root_init.idl",
"dom/static_range_init.idl",
"dom/events/add_event_listener_options.idl",
"dom/events/custom_event_init.idl",
"dom/events/event_init.idl",
"dom/events/event_listener_options.idl",
"dom/events/event_modifier_init.idl",
"editing/ime/edit_context_init.idl",
"editing/ime/text_update_event_init.idl",
"editing/ime/text_format_update_event_init.idl",
"events/animation_event_init.idl",
"events/animation_playback_event_init.idl",
"events/application_cache_error_event_init.idl",
"events/clipboard_event_init.idl",
"events/composition_event_init.idl",
"events/drag_event_init.idl",
"events/error_event_init.idl",
"events/focus_event_init.idl",
"events/hash_change_event_init.idl",
"events/input_event_init.idl",
"events/keyboard_event_init.idl",
"events/message_event_init.idl",
"events/mouse_event_init.idl",
"events/overscroll_event_init.idl",
"events/page_transition_event_init.idl",
"events/pointer_event_init.idl",
"events/pop_state_event_init.idl",
"events/progress_event_init.idl",
"events/promise_rejection_event_init.idl",
"events/security_policy_violation_event_init.idl",
"events/touch_event_init.idl",
"events/transition_event_init.idl",
"events/ui_event_init.idl",
"events/wheel_event_init.idl",
"fetch/request_init.idl",
"fetch/response_init.idl",
"fetch/trust_token.idl",
"fileapi/blob_property_bag.idl",
"fileapi/file_property_bag.idl",
"frame/impression_params.idl",
"frame/is_input_pending_options.idl",
"frame/navigator_ua_brand_version.idl",
"frame/reporting_observer_options.idl",
"frame/scroll_into_view_options.idl",
"frame/scroll_options.idl",
"frame/scroll_to_options.idl",
"frame/window_post_message_options.idl",
"fullscreen/fullscreen_options.idl",
"geometry/dom_matrix_2d_init.idl",
"geometry/dom_matrix_init.idl",
"geometry/dom_point_init.idl",
"geometry/dom_quad_init.idl",
"geometry/dom_rect_init.idl",
"html/focus_options.idl",
"html/assigned_nodes_options.idl",
"html/canvas/baselines.idl",
"html/canvas/image_data_settings.idl",
"html/canvas/image_encode_options.idl",
"html/custom/validity_state_flags.idl",
"html/forms/form_data_event_init.idl",
"html/forms/submit_event_init.idl",
"html/portal/portal_activate_event_init.idl",
"html/portal/portal_activate_options.idl",
"html/track/track_event_init.idl",
"imagebitmap/image_bitmap_options.idl",
"input/input_device_capabilities_init.idl",
"input/touch_init.idl",
"intersection_observer/intersection_observer_init.idl",
"frame/ua_data_values.idl",
"layout/ng/custom/custom_layout_constraints_options.idl",
"layout/ng/custom/fragment_result_options.idl",
"layout/ng/custom/intrinsic_sizes_result_options.idl",
"messaging/post_message_options.idl",
"mojo/mojo_create_data_pipe_options.idl",
"mojo/mojo_create_data_pipe_result.idl",
"mojo/mojo_create_message_pipe_result.idl",
"mojo/mojo_create_shared_buffer_result.idl",
"mojo/mojo_discard_data_options.idl",
"mojo/mojo_duplicate_buffer_handle_options.idl",
"mojo/mojo_handle_signals.idl",
"mojo/mojo_map_buffer_result.idl",
"mojo/mojo_read_data_options.idl",
"mojo/mojo_read_data_result.idl",
"mojo/mojo_read_message_flags.idl",
"mojo/mojo_read_message_result.idl",
"mojo/mojo_write_data_options.idl",
"mojo/mojo_write_data_result.idl",
"mojo/test/mojo_interface_request_event_init.idl",
"page/scrolling/scroll_state_init.idl",
"resize_observer/resize_observer_options.idl",
"streams/readable_stream_byob_read_result.idl",
"streams/readable_stream_get_reader_options.idl",
"streams/readable_writable_pair.idl",
"streams/stream_pipe_options.idl",
"streams/underlying_source.idl",
"streams/queuing_strategy_init.idl",
"timing/measure_memory/memory_measurement.idl",
"timing/measure_memory/memory_breakdown_entry.idl",
"timing/measure_memory/memory_attribution.idl",
"timing/measure_memory/memory_attribution_container.idl",
"timing/performance_mark_options.idl",
"timing/performance_measure_options.idl",
"timing/performance_observer_init.idl",
"timing/profiler_frame.idl",
"timing/profiler_init_options.idl",
"timing/profiler_sample.idl",
"timing/profiler_stack.idl",
"timing/profiler_trace.idl",
"trustedtypes/trusted_type_policy_options.idl",
"workers/worker_options.idl",
"workers/worklet_options.idl",
"xml/parse_from_string_options.idl",
],
"abspath")
get_path_info(
[
"animation/base_keyframe.idl",
"animation/base_property_indexed_keyframe.idl",
"animation/computed_effect_timing.idl",
"animation/document_timeline_options.idl",
"animation/effect_timing.idl",
"animation/get_animations_options.idl",
"animation/keyframe_animation_options.idl",
"animation/keyframe_effect_options.idl",
"animation/optional_effect_timing.idl",
"animation/scroll_timeline_element_based_offset.idl",
"animation/scroll_timeline_options.idl",
"css/css_style_sheet_init.idl",
"css/font_face_descriptors.idl",
"css/font_face_set_load_event_init.idl",
"css/media_query_list_event_init.idl",
"css/property_definition.idl",
"css/cssom/css_matrix_component_options.idl",
"css/cssom/css_numeric_type.idl",
"document_transition/document_transition_init.idl",
"dom/element_creation_options.idl",
"dom/element_definition_options.idl",
"dom/element_registration_options.idl",
"dom/get_inner_html_options.idl",
"dom/get_root_node_options.idl",
"dom/idle_request_options.idl",
"dom/interest_cohort.idl",
"dom/mutation_observer_init.idl",
"dom/pointer_lock_options.idl",
"dom/shadow_root_init.idl",
"dom/static_range_init.idl",
"dom/events/add_event_listener_options.idl",
"dom/events/custom_event_init.idl",
"dom/events/event_init.idl",
"dom/events/event_listener_options.idl",
"dom/events/event_modifier_init.idl",
"editing/ime/edit_context_init.idl",
"editing/ime/text_update_event_init.idl",
"editing/ime/text_format_update_event_init.idl",
"events/animation_event_init.idl",
"events/animation_playback_event_init.idl",
"events/application_cache_error_event_init.idl",
"events/clipboard_event_init.idl",
"events/composition_event_init.idl",
"events/drag_event_init.idl",
"events/error_event_init.idl",
"events/focus_event_init.idl",
"events/hash_change_event_init.idl",
"events/input_event_init.idl",
"events/keyboard_event_init.idl",
"events/message_event_init.idl",
"events/mouse_event_init.idl",
"events/overscroll_event_init.idl",
"events/page_transition_event_init.idl",
"events/pointer_event_init.idl",
"events/pop_state_event_init.idl",
"events/progress_event_init.idl",
"events/promise_rejection_event_init.idl",
"events/security_policy_violation_event_init.idl",
"events/touch_event_init.idl",
"events/transition_event_init.idl",
"events/ui_event_init.idl",
"events/wheel_event_init.idl",
"fetch/request_init.idl",
"fetch/response_init.idl",
"fetch/trust_token.idl",
"fileapi/blob_property_bag.idl",
"fileapi/file_property_bag.idl",
"frame/impression_params.idl",
"frame/is_input_pending_options.idl",
"frame/navigator_ua_brand_version.idl",
"frame/reporting_observer_options.idl",
"frame/scroll_into_view_options.idl",
"frame/scroll_options.idl",
"frame/scroll_to_options.idl",
"frame/window_controls_overlay_geometry_change_event_init.idl",
"frame/window_post_message_options.idl",
"fullscreen/fullscreen_options.idl",
"geometry/dom_matrix_2d_init.idl",
"geometry/dom_matrix_init.idl",
"geometry/dom_point_init.idl",
"geometry/dom_quad_init.idl",
"geometry/dom_rect_init.idl",
"html/focus_options.idl",
"html/assigned_nodes_options.idl",
"html/canvas/baselines.idl",
"html/canvas/image_data_settings.idl",
"html/canvas/image_encode_options.idl",
"html/custom/validity_state_flags.idl",
"html/forms/form_data_event_init.idl",
"html/forms/submit_event_init.idl",
"html/portal/portal_activate_event_init.idl",
"html/portal/portal_activate_options.idl",
"html/track/track_event_init.idl",
"imagebitmap/image_bitmap_options.idl",
"input/input_device_capabilities_init.idl",
"input/touch_init.idl",
"intersection_observer/intersection_observer_init.idl",
"frame/ua_data_values.idl",
"layout/ng/custom/custom_layout_constraints_options.idl",
"layout/ng/custom/fragment_result_options.idl",
"layout/ng/custom/intrinsic_sizes_result_options.idl",
"messaging/post_message_options.idl",
"mojo/mojo_create_data_pipe_options.idl",
"mojo/mojo_create_data_pipe_result.idl",
"mojo/mojo_create_message_pipe_result.idl",
"mojo/mojo_create_shared_buffer_result.idl",
"mojo/mojo_discard_data_options.idl",
"mojo/mojo_duplicate_buffer_handle_options.idl",
"mojo/mojo_handle_signals.idl",
"mojo/mojo_map_buffer_result.idl",
"mojo/mojo_read_data_options.idl",
"mojo/mojo_read_data_result.idl",
"mojo/mojo_read_message_flags.idl",
"mojo/mojo_read_message_result.idl",
"mojo/mojo_write_data_options.idl",
"mojo/mojo_write_data_result.idl",
"mojo/test/mojo_interface_request_event_init.idl",
"page/scrolling/scroll_state_init.idl",
"resize_observer/resize_observer_options.idl",
"streams/readable_stream_byob_read_result.idl",
"streams/readable_stream_get_reader_options.idl",
"streams/readable_writable_pair.idl",
"streams/stream_pipe_options.idl",
"streams/underlying_source.idl",
"streams/queuing_strategy_init.idl",
"timing/measure_memory/memory_measurement.idl",
"timing/measure_memory/memory_breakdown_entry.idl",
"timing/measure_memory/memory_attribution.idl",
"timing/measure_memory/memory_attribution_container.idl",
"timing/performance_mark_options.idl",
"timing/performance_measure_options.idl",
"timing/performance_observer_init.idl",
"timing/profiler_frame.idl",
"timing/profiler_init_options.idl",
"timing/profiler_sample.idl",
"timing/profiler_stack.idl",
"timing/profiler_trace.idl",
"trustedtypes/trusted_type_policy_options.idl",
"workers/worker_options.idl",
"workers/worklet_options.idl",
"xml/parse_from_string_options.idl",
],
"abspath")

core_testing_dictionary_idl_files =
get_path_info([
Expand Down
Expand Up @@ -48,5 +48,6 @@
"Worker",
"XMLHttpRequest",
"XMLHttpRequestUpload",
"WindowControlsOverlay",
],
}
2 changes: 2 additions & 0 deletions third_party/blink/renderer/core/frame/build.gni
Expand Up @@ -221,6 +221,8 @@ blink_core_sources_frame = [
"window_event_handlers.h",
"window_controls_overlay.cc",
"window_controls_overlay.h",
"window_controls_overlay_geometry_change_event.cc",
"window_controls_overlay_geometry_change_event.h",
"window_or_worker_global_scope.cc",
"window_or_worker_global_scope.h",
]

0 comments on commit 469a000

Please sign in to comment.