Index: ash/wm/window_mirror_view.cc |
diff --git a/ash/wm/window_mirror_view.cc b/ash/wm/window_mirror_view.cc |
index 374207c1c61cc35bec7ca4d259119404fcc4ffd2..b43207e040a626cafb7c5303692abd218cffd529 100644 |
--- a/ash/wm/window_mirror_view.cc |
+++ b/ash/wm/window_mirror_view.cc |
@@ -30,9 +30,11 @@ void EnsureAllChildrenAreVisible(ui::Layer* layer) { |
} // namespace |
-WindowMirrorView::WindowMirrorView(WmWindowAura* window) : target_(window) { |
+WindowMirrorView::WindowMirrorView(WmWindowAura* window) |
+ : target_(window), scoped_observer_(this) { |
DCHECK(window); |
} |
+ |
WindowMirrorView::~WindowMirrorView() {} |
gfx::Size WindowMirrorView::GetPreferredSize() const { |
@@ -79,10 +81,22 @@ ui::LayerDelegate* WindowMirrorView::CreateDelegate( |
return delegates_.back().get(); |
} |
+void WindowMirrorView::OnDelegatedFrameDamageInTree() { |
+ layer_owner_.reset(); |
+ if (!GetVisibleBounds().IsEmpty()) |
+ InitLayerOwner(); |
+} |
+ |
+void WindowMirrorView::OnLayerDestroyed(ui::Layer* layer) { |
+ scoped_observer_.Remove(layer); |
+} |
+ |
void WindowMirrorView::InitLayerOwner() { |
SetPaintToLayer(true); |
+ scoped_observer_.RemoveAll(); |
layer_owner_ = ::wm::RecreateLayers(target_->aura_window(), this); |
+ scoped_observer_.Add(target_->aura_window()->layer()); |
GetMirrorLayer()->parent()->Remove(GetMirrorLayer()); |
layer()->Add(GetMirrorLayer()); |