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..3951244d7e860753af6d117f5dd08ddea1adcf59 100644 |
--- a/ash/system/tray/system_tray_bubble.cc |
+++ b/ash/system/tray/system_tray_bubble.cc |
@@ -154,7 +154,9 @@ void SystemTrayBubble::UpdateView( |
const int kSwipeDelayMS = 150; |
base::TimeDelta swipe_duration = |
base::TimeDelta::FromMilliseconds(kSwipeDelayMS); |
- ui::Layer* layer = bubble_view_->RecreateLayer(); |
+ scoped_ptr<ui::Layer> scoped_layer(bubble_view_->RecreateLayer()); |
+ // Keep the reference to layer as we need it after releasing it. |
+ ui::Layer* layer = scoped_layer.get(); |
DCHECK(layer); |
layer->SuppressPaint(); |
@@ -165,7 +167,8 @@ void SystemTrayBubble::UpdateView( |
// animation. |
layer->parent()->StackAbove(layer, bubble_view_->layer()); |
ui::ScopedLayerAnimationSettings settings(layer->GetAnimator()); |
- settings.AddObserver(new AnimationObserverDeleteLayer(layer)); |
+ settings.AddObserver( |
+ new AnimationObserverDeleteLayer(scoped_layer.release())); |
settings.SetTransitionDuration(swipe_duration); |
settings.SetTweenType(ui::Tween::EASE_OUT); |
gfx::Transform transform; |
@@ -227,7 +230,8 @@ void SystemTrayBubble::UpdateView( |
new_layer->SetTransform(transform); |
{ |
ui::ScopedLayerAnimationSettings settings(new_layer->GetAnimator()); |
- settings.AddObserver(new AnimationObserverDeleteLayer(layer)); |
+ settings.AddObserver( |
+ new AnimationObserverDeleteLayer(scoped_layer.release())); |
settings.SetTransitionDuration(swipe_duration); |
settings.SetTweenType(ui::Tween::EASE_OUT); |
new_layer->SetTransform(gfx::Transform()); |