Index: ash/system/tray/system_tray_bubble.cc |
diff --git a/ash/system/tray/system_tray_bubble.cc b/ash/system/tray/system_tray_bubble.cc |
index 8274d79c6824eaa90e43aae579163d3b999bfff9..f806947615bbbfcbce9bb3cc31678ab078736448 100644 |
--- a/ash/system/tray/system_tray_bubble.cc |
+++ b/ash/system/tray/system_tray_bubble.cc |
@@ -154,6 +154,7 @@ void SystemTrayBubble::UpdateView( |
const int kSwipeDelayMS = 150; |
base::TimeDelta swipe_duration = |
base::TimeDelta::FromMilliseconds(kSwipeDelayMS); |
+ bool delete_layer = true; |
ui::Layer* layer = bubble_view_->RecreateLayer(); |
sadrul
2012/12/19 23:50:33
Does it make sense to make |layer| a scoped_ptr, a
oshima
2012/12/20 00:05:19
As I mentioned in the bug description, layer is be
sadrul
2012/12/20 00:08:01
release() wouldn't destroy the layer, right? So it
|
DCHECK(layer); |
layer->SuppressPaint(); |
@@ -165,6 +166,7 @@ void SystemTrayBubble::UpdateView( |
// animation. |
layer->parent()->StackAbove(layer, bubble_view_->layer()); |
ui::ScopedLayerAnimationSettings settings(layer->GetAnimator()); |
+ delete_layer = false; |
settings.AddObserver(new AnimationObserverDeleteLayer(layer)); |
settings.SetTransitionDuration(swipe_duration); |
settings.SetTweenType(ui::Tween::EASE_OUT); |
@@ -207,6 +209,8 @@ void SystemTrayBubble::UpdateView( |
// Close bubble view if we failed to create the item view. |
if (!bubble_view_->has_children()) { |
+ if (delete_layer) |
+ delete layer; |
Close(); |
return; |
} |
@@ -227,12 +231,15 @@ void SystemTrayBubble::UpdateView( |
new_layer->SetTransform(transform); |
{ |
ui::ScopedLayerAnimationSettings settings(new_layer->GetAnimator()); |
+ delete_layer = false; |
settings.AddObserver(new AnimationObserverDeleteLayer(layer)); |
settings.SetTransitionDuration(swipe_duration); |
settings.SetTweenType(ui::Tween::EASE_OUT); |
new_layer->SetTransform(gfx::Transform()); |
} |
} |
+ if (delete_layer) |
+ delete layer; |
} |
void SystemTrayBubble::InitView(views::View* anchor, |