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

Unified Diff: third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp

Issue 1810833002: Blink Compositor Animations: Add tests for resetting delegate in CC on Blink player deletion. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp
diff --git a/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp b/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp
index 13e70aa67edc0b16842b0079880582f3c57f4098..563f331723735fbf642a17dfe2126e1c03acc969 100644
--- a/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp
+++ b/third_party/WebKit/Source/platform/animation/CompositorAnimationPlayerTest.cpp
@@ -7,44 +7,104 @@
#include "base/memory/scoped_ptr.h"
#include "base/time/time.h"
#include "platform/animation/CompositorAnimationDelegate.h"
+#include "platform/animation/CompositorAnimationPlayerClient.h"
+#include "platform/animation/CompositorAnimationTimeline.h"
#include "platform/animation/CompositorTargetProperty.h"
-#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-using base::TimeTicks;
-using blink::CompositorAnimationDelegate;
-using cc::Animation;
-using testing::_;
-
namespace blink {
-class MockCompositorAnimationDelegate : public CompositorAnimationDelegate {
+class CompositorAnimationDelegateForTesting : public CompositorAnimationDelegate {
public:
- MockCompositorAnimationDelegate() {}
+ CompositorAnimationDelegateForTesting() { resetFlags(); }
+
+ void resetFlags()
+ {
+ m_started = false;
+ m_finished = false;
+ m_aborted = false;
+ }
- MOCK_METHOD2(notifyAnimationStarted, void(double, int));
- MOCK_METHOD2(notifyAnimationFinished, void(double, int));
- MOCK_METHOD2(notifyAnimationAborted, void(double, int));
+ void notifyAnimationStarted(double, int) override { m_started = true; }
+ void notifyAnimationFinished(double, int) override { m_finished = true; }
+ void notifyAnimationAborted(double, int) override { m_aborted = true; }
+
+ bool m_started;
+ bool m_finished;
+ bool m_aborted;
};
+class CompositorAnimationPlayerTestClient : public CompositorAnimationPlayerClient {
+public:
+ CompositorAnimationPlayerTestClient() : m_player(new CompositorAnimationPlayer) {}
+
+ CompositorAnimationPlayer* compositorPlayer() const override
+ {
+ return m_player.get();
+ }
+
+ scoped_ptr<CompositorAnimationPlayer> m_player;
+};
+
+
// Test that when the animation delegate is null, the animation player
// doesn't forward the finish notification.
TEST(CompositorAnimationPlayerTest, NullDelegate)
{
- scoped_ptr<CompositorAnimationDelegate> delegate(
- new MockCompositorAnimationDelegate);
- EXPECT_CALL(*static_cast<MockCompositorAnimationDelegate*>(delegate.get()),
- notifyAnimationFinished(_, _))
- .Times(1);
+ scoped_ptr<CompositorAnimationDelegateForTesting> delegate(new CompositorAnimationDelegateForTesting);
+
+ scoped_ptr<CompositorAnimationPlayer> player(new CompositorAnimationPlayer);
+ cc::AnimationPlayer* ccPlayer = player->animationPlayer();
+
+ player->setAnimationDelegate(delegate.get());
+ EXPECT_FALSE(delegate->m_finished);
+
+ ccPlayer->NotifyAnimationFinished(base::TimeTicks(), CompositorTargetProperty::SCROLL_OFFSET, 0);
+ EXPECT_TRUE(delegate->m_finished);
+
+ delegate->resetFlags();
+
+ player->setAnimationDelegate(nullptr);
+ ccPlayer->NotifyAnimationFinished(base::TimeTicks(), CompositorTargetProperty::SCROLL_OFFSET, 0);
+ EXPECT_FALSE(delegate->m_finished);
+}
+
+TEST(CompositorAnimationPlayerTest, NotifyFromCCAfterCompositorPlayerDeletion)
+{
+ scoped_ptr<CompositorAnimationDelegateForTesting> delegate(new CompositorAnimationDelegateForTesting);
+
+ scoped_ptr<CompositorAnimationPlayer> player(new CompositorAnimationPlayer);
+ scoped_refptr<cc::AnimationPlayer> ccPlayer = player->animationPlayer();
+
+ player->setAnimationDelegate(delegate.get());
+ EXPECT_FALSE(delegate->m_finished);
+
+ // Delete CompositorAnimationPlayer. ccPlayer stays alive.
+ player = nullptr;
+
+ // No notifications. Doesn't crash.
+ ccPlayer->NotifyAnimationFinished(base::TimeTicks(), CompositorTargetProperty::OPACITY, 0);
+ EXPECT_FALSE(delegate->m_finished);
+}
+
+TEST(CompositorAnimationPlayerTest, CompositorPlayerDeletionDetachesFromCCTimeline)
+{
+ scoped_ptr<CompositorAnimationTimeline> timeline(new CompositorAnimationTimeline);
+ scoped_ptr<CompositorAnimationPlayerTestClient> client(new CompositorAnimationPlayerTestClient);
+
+ scoped_refptr<cc::AnimationTimeline> ccTimeline = timeline->animationTimeline();
+ scoped_refptr<cc::AnimationPlayer> ccPlayer = client->m_player->animationPlayer();
+ EXPECT_FALSE(ccPlayer->animation_timeline());
- scoped_ptr<CompositorAnimationPlayer> webPlayer(new CompositorAnimationPlayer);
- cc::AnimationPlayer* player = webPlayer->animationPlayer();
+ timeline->playerAttached(*client);
+ EXPECT_TRUE(ccPlayer->animation_timeline());
+ EXPECT_TRUE(ccTimeline->GetPlayerById(ccPlayer->id()));
- webPlayer->setAnimationDelegate(delegate.get());
- player->NotifyAnimationFinished(TimeTicks(), CompositorTargetProperty::SCROLL_OFFSET, 0);
+ // Delete client and CompositorAnimationPlayer while attached to timeline.
+ client = nullptr;
- webPlayer->setAnimationDelegate(nullptr);
- player->NotifyAnimationFinished(TimeTicks(), CompositorTargetProperty::SCROLL_OFFSET, 0);
+ EXPECT_FALSE(ccPlayer->animation_timeline());
+ EXPECT_FALSE(ccTimeline->GetPlayerById(ccPlayer->id()));
}
} // namespace blink
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698