diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/widget/widget_base.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/platform/widget/widget_base.cc | 67 |
1 files changed, 37 insertions, 30 deletions
diff --git a/chromium/third_party/blink/renderer/platform/widget/widget_base.cc b/chromium/third_party/blink/renderer/platform/widget/widget_base.cc index bcf11465aa1..cc559340816 100644 --- a/chromium/third_party/blink/renderer/platform/widget/widget_base.cc +++ b/chromium/third_party/blink/renderer/platform/widget/widget_base.cc @@ -13,6 +13,7 @@ #include "cc/mojo_embedder/async_layer_tree_frame_sink.h" #include "cc/trees/layer_tree_host.h" #include "cc/trees/layer_tree_settings.h" +#include "cc/trees/paint_holding_reason.h" #include "cc/trees/ukm_manager.h" #include "components/viz/common/features.h" #include "components/viz/common/switches.h" @@ -26,7 +27,6 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/common/input/web_input_event_attribution.h" #include "third_party/blink/public/common/switches.h" -#include "third_party/blink/public/common/widget/screen_info.h" #include "third_party/blink/public/mojom/input/pointer_lock_context.mojom-blink.h" #include "third_party/blink/public/mojom/page/record_content_to_visible_time_request.mojom-blink.h" #include "third_party/blink/public/mojom/widget/visual_properties.mojom-blink.h" @@ -48,6 +48,7 @@ #include "third_party/blink/renderer/platform/widget/input/widget_input_handler_manager.h" #include "third_party/blink/renderer/platform/widget/widget_base_client.h" #include "ui/base/ime/mojom/text_input_state.mojom-blink.h" +#include "ui/display/screen_info.h" #include "ui/gfx/geometry/dip_util.h" #include "ui/gfx/presentation_feedback.h" @@ -104,19 +105,19 @@ ui::TextInputMode ConvertWebTextInputMode(blink::WebTextInputMode mode) { return static_cast<ui::TextInputMode>(mode); } -unsigned OrientationTypeToAngle(mojom::blink::ScreenOrientation type) { +unsigned OrientationTypeToAngle(display::mojom::blink::ScreenOrientation type) { unsigned angle; // FIXME(ostap): This relationship between orientationType and // orientationAngle is temporary. The test should be able to specify // the angle in addition to the orientation type. switch (type) { - case mojom::blink::ScreenOrientation::kLandscapePrimary: + case display::mojom::blink::ScreenOrientation::kLandscapePrimary: angle = 90; break; - case mojom::blink::ScreenOrientation::kLandscapeSecondary: + case display::mojom::blink::ScreenOrientation::kLandscapeSecondary: angle = 270; break; - case mojom::blink::ScreenOrientation::kPortraitSecondary: + case display::mojom::blink::ScreenOrientation::kPortraitSecondary: angle = 180; break; default: @@ -175,7 +176,7 @@ WidgetBase::~WidgetBase() { void WidgetBase::InitializeCompositing( scheduler::WebAgentGroupScheduler& agent_group_scheduler, bool for_child_local_root_frame, - const ScreenInfos& screen_infos, + const display::ScreenInfos& screen_infos, const cc::LayerTreeSettings* settings, base::WeakPtr<mojom::blink::FrameWidgetInputHandler> frame_widget_input_handler) { @@ -192,7 +193,7 @@ void WidgetBase::InitializeCompositing( absl::optional<cc::LayerTreeSettings> default_settings; if (!settings) { - const ScreenInfo& screen_info = screen_infos.current(); + const display::ScreenInfo& screen_info = screen_infos.current(); default_settings = GenerateLayerTreeSettings( compositing_thread_scheduler, for_child_local_root_frame, screen_info.rect.size(), screen_info.device_scale_factor); @@ -210,16 +211,11 @@ void WidgetBase::InitializeCompositing( FrameWidget* frame_widget = client_->FrameWidget(); + // |compositor_thread_scheduler| will be null for a popup (since it has no + // FrameWidget) or in tests without a compositor thread. scheduler::WebThreadScheduler* compositor_thread_scheduler = - scheduler::WebThreadScheduler::CompositorThreadScheduler(); - scoped_refptr<base::SingleThreadTaskRunner> compositor_input_task_runner; - // Use the compositor thread task runner unless this is a popup or other such - // non-frame widgets. The |compositor_thread_scheduler| can be null in tests - // without a compositor thread. - if (frame_widget && compositor_thread_scheduler) { - compositor_input_task_runner = - compositor_thread_scheduler->DefaultTaskRunner(); - } + frame_widget ? scheduler::WebThreadScheduler::CompositorThreadScheduler() + : nullptr; // We only use an external input handler for frame widgets because only // frames use the compositor for input handling. Other kinds of widgets @@ -228,8 +224,8 @@ void WidgetBase::InitializeCompositing( bool uses_input_handler = frame_widget; widget_input_handler_manager_ = WidgetInputHandlerManager::Create( weak_ptr_factory_.GetWeakPtr(), std::move(frame_widget_input_handler), - never_composited_, std::move(compositor_input_task_runner), - main_thread_scheduler, uses_input_handler); + never_composited_, compositor_thread_scheduler, main_thread_scheduler, + uses_input_handler); const base::CommandLine& command_line = *base::CommandLine::ForCurrentProcess(); @@ -252,7 +248,7 @@ void WidgetBase::InitializeCompositing( void WidgetBase::InitializeNonCompositing() { DCHECK(!initialized_); // WidgetBase users implicitly expect one default ScreenInfo to exist. - screen_infos_ = ScreenInfos(ScreenInfo()); + screen_infos_ = display::ScreenInfos(display::ScreenInfo()); initialized_ = true; } @@ -490,10 +486,11 @@ void WidgetBase::OnDeferMainFrameUpdatesChanged(bool defer) { widget_input_handler_manager_->OnDeferMainFrameUpdatesChanged(defer); } -void WidgetBase::OnDeferCommitsChanged(bool defer) { +void WidgetBase::OnDeferCommitsChanged(bool defer, + cc::PaintHoldingReason reason) { // The input handler wants to know about the commit status for metric purposes // and to enable/disable input. - widget_input_handler_manager_->OnDeferCommitsChanged(defer); + widget_input_handler_manager_->OnDeferCommitsChanged(defer, reason); } void WidgetBase::DidBeginMainFrame() { @@ -822,6 +819,14 @@ void WidgetBase::UpdateTooltipUnderCursor(const String& tooltip_text, tooltip_text.IsEmpty() ? "" : tooltip_text, ToBaseTextDirection(dir)); } +void WidgetBase::UpdateTooltipFromKeyboard(const String& tooltip_text, + TextDirection dir, + const gfx::Rect& bounds) { + widget_host_->UpdateTooltipFromKeyboard( + tooltip_text.IsEmpty() ? "" : tooltip_text, ToBaseTextDirection(dir), + BlinkSpaceToEnclosedDIPs(bounds)); +} + void WidgetBase::ShowVirtualKeyboard() { UpdateTextInputStateInternal(true, false); } @@ -1093,7 +1098,7 @@ bool WidgetBase::ShouldUpdateCompositionInfo(const gfx::Range& range, return true; if (bounds.size() != composition_character_bounds_.size()) return true; - for (size_t i = 0; i < bounds.size(); ++i) { + for (wtf_size_t i = 0; i < bounds.size(); ++i) { if (bounds[i] != composition_character_bounds_[i]) return true; } @@ -1361,9 +1366,9 @@ void WidgetBase::RequestAnimationAfterDelayTimerFired(TimerBase*) { void WidgetBase::UpdateSurfaceAndScreenInfo( const viz::LocalSurfaceId& new_local_surface_id, const gfx::Rect& compositor_viewport_pixel_rect, - const ScreenInfos& screen_infos) { - ScreenInfos new_screen_infos = screen_infos; - ScreenInfo& new_screen_info = new_screen_infos.mutable_current(); + const display::ScreenInfos& screen_infos) { + display::ScreenInfos new_screen_infos = screen_infos; + display::ScreenInfo& new_screen_info = new_screen_infos.mutable_current(); // If there is a screen orientation override apply it. if (auto orientation_override = client_->ScreenOrientationOverride()) { @@ -1374,12 +1379,13 @@ void WidgetBase::UpdateSurfaceAndScreenInfo( // RenderWidgetHostImpl::SynchronizeVisualProperties uses similar logic to // detect orientation changes on the display currently showing the widget. - const ScreenInfo& previous_screen_info = screen_infos_.current(); + const display::ScreenInfo& previous_screen_info = screen_infos_.current(); bool orientation_changed = previous_screen_info.orientation_angle != new_screen_info.orientation_angle || previous_screen_info.orientation_type != new_screen_info.orientation_type; - ScreenInfo previous_original_screen_info = client_->GetOriginalScreenInfo(); + display::ScreenInfo previous_original_screen_info = + client_->GetOriginalScreenInfo(); local_surface_id_from_parent_ = new_local_surface_id; screen_infos_ = new_screen_infos; @@ -1403,14 +1409,15 @@ void WidgetBase::UpdateSurfaceAndScreenInfo( client_->DidUpdateSurfaceAndScreen(previous_original_screen_info); } -void WidgetBase::UpdateScreenInfo(const ScreenInfos& new_screen_infos) { +void WidgetBase::UpdateScreenInfo( + const display::ScreenInfos& new_screen_infos) { UpdateSurfaceAndScreenInfo(local_surface_id_from_parent_, CompositorViewportRect(), new_screen_infos); } void WidgetBase::UpdateCompositorViewportAndScreenInfo( const gfx::Rect& compositor_viewport_pixel_rect, - const ScreenInfos& new_screen_infos) { + const display::ScreenInfos& new_screen_infos) { UpdateSurfaceAndScreenInfo(local_surface_id_from_parent_, compositor_viewport_pixel_rect, new_screen_infos); } @@ -1428,7 +1435,7 @@ void WidgetBase::UpdateSurfaceAndCompositorRect( compositor_viewport_pixel_rect, screen_infos_); } -const ScreenInfo& WidgetBase::GetScreenInfo() { +const display::ScreenInfo& WidgetBase::GetScreenInfo() { return screen_infos_.current(); } |