Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2731)

Unified Diff: ash/rotator/screen_rotation_animation_unittest.cc

Issue 2473523003: ash: Avoid a shutdown crash in ScreenRotationAnimation. (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/rotator/screen_rotation_animation_unittest.cc
diff --git a/ash/rotator/screen_rotation_animation_unittest.cc b/ash/rotator/screen_rotation_animation_unittest.cc
index b4ce508f9dd7f531c35af5949f890f0c421de95d..8c3535c8e6d012aa695f7e508b172e6b07853089 100644
--- a/ash/rotator/screen_rotation_animation_unittest.cc
+++ b/ash/rotator/screen_rotation_animation_unittest.cc
@@ -8,6 +8,7 @@
#include "ash/test/ash_test_base.h"
#include "base/macros.h"
+#include "base/memory/ptr_util.h"
#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/aura/window.h"
@@ -69,5 +70,29 @@ TEST_F(ScreenRotationAnimationTest, LayerTransformGetsSetToTargetWhenAborted) {
EXPECT_EQ(identity_transform, layer->transform());
}
+// Tests that ScreenRotationAnimation::OnAbort() doesn't segfault when passed a
+// null delegate in response to its ui::Layer being destroyed:
+// http://crbug.com/661313
+TEST_F(ScreenRotationAnimationTest, DestroyLayerDuringAnimation) {
+ // Create a ui::Layer directly rather than an aura::Window, as the latter
+ // finishes all of its animation before destroying its layer.
+ std::unique_ptr<ui::Layer> layer = base::MakeUnique<ui::Layer>();
+
+ ui::Layer* root_layer = CurrentContext()->layer();
+ layer->SetBounds(gfx::Rect(root_layer->bounds().size()));
+ root_layer->Add(layer.get());
+
+ std::unique_ptr<ScreenRotationAnimation> screen_rotation(
+ new ScreenRotationAnimation(layer.get(), 45, 0, 1.0f, 1.0f, gfx::Point(),
+ base::TimeDelta::FromSeconds(1),
+ gfx::Tween::LINEAR));
+ ui::LayerAnimator* animator = layer->GetAnimator();
+ std::unique_ptr<ui::LayerAnimationSequence> animation_sequence(
+ new ui::LayerAnimationSequence(screen_rotation.release()));
+ animator->StartAnimation(animation_sequence.release());
+
+ layer.reset();
James Cook 2016/11/02 02:19:17 not needed? or comment that you're explicitly dest
Daniel Erat 2016/11/02 14:04:05 Done. (kept this because if this starts failing, i
+}
+
} // namespace test
} // namespace ash
« ash/rotator/screen_rotation_animation.cc ('K') | « ash/rotator/screen_rotation_animation.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698