Index: ui/aura/mus/window_port_mus.cc |
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc |
index a6c5ed02dd4139fc9d7bccd9ca8c67a06434ddf3..1420228e6649ffec6496402e0a3a33443db489e0 100644 |
--- a/ui/aura/mus/window_port_mus.cc |
+++ b/ui/aura/mus/window_port_mus.cc |
@@ -44,7 +44,7 @@ WindowPortMus::WindowPortMus(WindowTreeClient* client, |
: WindowMus(window_mus_type), window_tree_client_(client) {} |
WindowPortMus::~WindowPortMus() { |
- SetPrimarySurfaceInfo(cc::SurfaceInfo()); |
+ client_surface_embedder_.reset(); |
// DESTROY is only scheduled from DestroyFromServer(), meaning if DESTROY is |
// present then the server originated the change. |
@@ -328,8 +328,8 @@ void WindowPortMus::SetPrimarySurfaceInfo(const cc::SurfaceInfo& surface_info) { |
void WindowPortMus::SetFallbackSurfaceInfo( |
const cc::SurfaceInfo& surface_info) { |
- DCHECK(client_surface_embedder_); |
- client_surface_embedder_->SetFallbackSurfaceInfo(surface_info); |
+ fallback_surface_info_ = surface_info; |
+ UpdateClientSurfaceEmbedder(); |
} |
void WindowPortMus::DestroyFromServer() { |
@@ -477,8 +477,6 @@ void WindowPortMus::OnVisibilityChanged(bool visible) { |
change_data.visible = visible; |
if (!RemoveChangeByTypeAndData(ServerChangeType::VISIBLE, change_data)) |
window_tree_client_->OnWindowMusSetVisible(this, visible); |
- // We should only embed a client if its visible. |
- UpdateClientSurfaceEmbedder(); |
} |
void WindowPortMus::OnDidChangeBounds(const gfx::Rect& old_bounds, |
@@ -487,6 +485,8 @@ void WindowPortMus::OnDidChangeBounds(const gfx::Rect& old_bounds, |
change_data.bounds_in_dip = new_bounds; |
if (!RemoveChangeByTypeAndData(ServerChangeType::BOUNDS, change_data)) |
window_tree_client_->OnWindowMusBoundsChanged(this, old_bounds, new_bounds); |
+ if (client_surface_embedder_) |
+ client_surface_embedder_->UpdateSizeAndGutters(); |
} |
std::unique_ptr<ui::PropertyData> WindowPortMus::OnWillChangeProperty( |
@@ -536,13 +536,18 @@ void WindowPortMus::UpdatePrimarySurfaceInfo() { |
} |
void WindowPortMus::UpdateClientSurfaceEmbedder() { |
- if (!client_surface_embedder_ && primary_surface_info_.is_valid()) |
- client_surface_embedder_ = base::MakeUnique<ClientSurfaceEmbedder>(window_); |
+ bool embeds_surface = window_mus_type() == WindowMusType::TOP_LEVEL_IN_WM || |
+ window_mus_type() == WindowMusType::EMBED_IN_OWNER; |
+ if (!embeds_surface) |
+ return; |
- if (primary_surface_info_.is_valid() && window_->IsVisible()) |
- client_surface_embedder_->SetPrimarySurfaceInfo(primary_surface_info_); |
- else |
- client_surface_embedder_.reset(); |
+ if (!client_surface_embedder_) { |
+ client_surface_embedder_ = base::MakeUnique<ClientSurfaceEmbedder>( |
+ window_, window_tree_client_->normal_client_area_insets_); |
+ } |
+ |
+ client_surface_embedder_->SetPrimarySurfaceInfo(primary_surface_info_); |
+ client_surface_embedder_->SetFallbackSurfaceInfo(fallback_surface_info_); |
} |
} // namespace aura |