fix: offscreen rendering crash on input select (#34069)
This commit is contained in:
parent
323f7d4c19
commit
90eb47f70b
4 changed files with 33 additions and 31 deletions
|
@ -397,7 +397,7 @@ void OffScreenRenderWidgetHostView::ResetFallbackToFirstNavigationSurface() {
|
|||
|
||||
void OffScreenRenderWidgetHostView::InitAsPopup(
|
||||
content::RenderWidgetHostView* parent_host_view,
|
||||
const gfx::Rect& pos,
|
||||
const gfx::Rect& bounds,
|
||||
const gfx::Rect& anchor_rect) {
|
||||
DCHECK_EQ(parent_host_view_, parent_host_view);
|
||||
DCHECK_EQ(widget_type_, content::WidgetType::kPopup);
|
||||
|
@ -411,13 +411,10 @@ void OffScreenRenderWidgetHostView::InitAsPopup(
|
|||
base::BindRepeating(&OffScreenRenderWidgetHostView::OnPopupPaint,
|
||||
parent_host_view_->weak_ptr_factory_.GetWeakPtr());
|
||||
|
||||
popup_position_ = pos;
|
||||
popup_position_ = bounds;
|
||||
|
||||
ResizeRootLayer(false);
|
||||
ResizeRootLayer(true);
|
||||
SetPainting(parent_host_view_->IsPainting());
|
||||
if (video_consumer_) {
|
||||
video_consumer_->SizeChanged();
|
||||
}
|
||||
Show();
|
||||
}
|
||||
|
||||
|
@ -688,13 +685,8 @@ void OffScreenRenderWidgetHostView::OnPaint(const gfx::Rect& damage_rect,
|
|||
|
||||
gfx::Size OffScreenRenderWidgetHostView::SizeInPixels() {
|
||||
float sf = GetDeviceScaleFactor();
|
||||
if (IsPopupWidget()) {
|
||||
return gfx::ToFlooredSize(
|
||||
gfx::ConvertSizeToPixels(popup_position_.size(), sf));
|
||||
} else {
|
||||
return gfx::ToFlooredSize(
|
||||
gfx::ConvertSizeToPixels(GetViewBounds().size(), sf));
|
||||
}
|
||||
return gfx::ToFlooredSize(
|
||||
gfx::ConvertSizeToPixels(GetViewBounds().size(), sf));
|
||||
}
|
||||
|
||||
void OffScreenRenderWidgetHostView::CompositeFrame(
|
||||
|
@ -995,7 +987,7 @@ void OffScreenRenderWidgetHostView::ResizeRootLayer(bool force) {
|
|||
display::Screen::GetScreen()->GetDisplayNearestView(GetNativeView());
|
||||
const float scaleFactor = display.device_scale_factor();
|
||||
float sf = GetDeviceScaleFactor();
|
||||
const bool scaleFactorDidChange = scaleFactor != sf;
|
||||
const bool sf_did_change = scaleFactor != sf;
|
||||
|
||||
// Initialize a screen_infos_ struct as needed, to cache the scale factor.
|
||||
if (screen_infos_.screen_infos.empty()) {
|
||||
|
@ -1003,14 +995,9 @@ void OffScreenRenderWidgetHostView::ResizeRootLayer(bool force) {
|
|||
}
|
||||
screen_infos_.mutable_current().device_scale_factor = scaleFactor;
|
||||
|
||||
gfx::Size size;
|
||||
if (!IsPopupWidget())
|
||||
size = GetViewBounds().size();
|
||||
else
|
||||
size = popup_position_.size();
|
||||
gfx::Size size = GetViewBounds().size();
|
||||
|
||||
if (!force && !scaleFactorDidChange &&
|
||||
size == GetRootLayer()->bounds().size())
|
||||
if (!force && !sf_did_change && size == GetRootLayer()->bounds().size())
|
||||
return;
|
||||
|
||||
GetRootLayer()->SetBounds(gfx::Rect(size));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue