Skip to content

Commit

Permalink
fix: propagate layout call to all children of `InspectableWebContents…
Browse files Browse the repository at this point in the history
…ViewViews` (#39994)

Propagate layout call to all children of InspectableWebContentsViewViews.

When BrowserView bounds are set from js, those might not trigger layout
immediately, sometimes propagating InvalidateLayout call to parent.
View is marked as needing layout, expecting to receive it from parent on
next layout call. The problem is that BrowserView's view is added as child
of InspectableWebContentsViews which does not call setBounds (which
would trigger layout) on all of it's children when doing it's layout,
so it skips propagating Layout call to its children BrowserViews views,
even though those were marked as needing layout.
Call base class View::Layout which will iterate over views' children
and call Layout on those that were marked as needing them.

Fixes #39993.
  • Loading branch information
marekharanczyk committed Sep 28, 2023
1 parent 43a646e commit 94585f5
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions shell/browser/ui/views/inspectable_web_contents_view_views.cc
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,8 @@ const std::u16string InspectableWebContentsViewViews::GetTitle() {
void InspectableWebContentsViewViews::Layout() {
if (!devtools_web_view_->GetVisible()) {
contents_web_view_->SetBoundsRect(GetContentsBounds());
// Propagate layout call to all children, for example browser views.
View::Layout();
return;
}

Expand All @@ -233,6 +235,9 @@ void InspectableWebContentsViewViews::Layout() {
devtools_web_view_->SetBoundsRect(new_devtools_bounds);
contents_web_view_->SetBoundsRect(new_contents_bounds);

// Propagate layout call to all children, for example browser views.
View::Layout();

if (GetDelegate())
GetDelegate()->DevToolsResized();
}
Expand Down

0 comments on commit 94585f5

Please sign in to comment.