Commit 861bce15 authored by Matthew Jones's avatar Matthew Jones Committed by Commit Bot

[Home] Allow bottom controls animation

The animation logic in the BrowserControlsOffsetManager did not
previously account for bottom controls when triggering an early exit.
This change only skips animation if both top and bottom browser
controls are 0.

BUG=713911

Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I9b4a24abfcb3cdd9184370d7bc401dbdec37daa9
Reviewed-on: https://chromium-review.googlesource.com/557953Reviewed-by: default avatarAlexandre Elias <aelias@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Commit-Queue: Matthew Jones <mdjones@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487497}
parent 7a5c961e
......@@ -223,7 +223,7 @@ void BrowserControlsOffsetManager::SetupAnimation(
if (has_animation() && animation_direction_ == direction)
return;
if (!TopControlsHeight()) {
if (!TopControlsHeight() && !BottomControlsHeight()) {
client_->SetCurrentBrowserControlsShownRatio(
direction == HIDING_CONTROLS ? 0.f : 1.f);
return;
......
......@@ -180,6 +180,38 @@ TEST(BrowserControlsOffsetManagerTest, PartialShownHideAnimation) {
EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
}
TEST(BrowserControlsOffsetManagerTest,
BottomControlsPartialShownHideAnimation) {
MockBrowserControlsOffsetManagerClient client(0.f, 0.5f, 0.5f);
client.SetBottomControlsHeight(100.f);
BrowserControlsOffsetManager* manager = client.manager();
manager->ScrollBegin();
manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
EXPECT_FLOAT_EQ(0.f, manager->BottomControlsShownRatio());
EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
manager->ScrollEnd();
manager->ScrollBegin();
manager->ScrollBy(gfx::Vector2dF(0.f, -20.f));
EXPECT_FLOAT_EQ(0.2f, manager->BottomControlsShownRatio());
EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
manager->ScrollEnd();
EXPECT_TRUE(manager->has_animation());
base::TimeTicks time = base::TimeTicks::Now();
float previous;
while (manager->has_animation()) {
previous = manager->BottomControlsShownRatio();
time = base::TimeDelta::FromMicroseconds(100) + time;
manager->Animate(time);
EXPECT_LT(manager->BottomControlsShownRatio(), previous);
}
EXPECT_FALSE(manager->has_animation());
EXPECT_FLOAT_EQ(0.f, manager->BottomControlsShownRatio());
EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
}
TEST(BrowserControlsOffsetManagerTest, PartialShownShowAnimation) {
MockBrowserControlsOffsetManagerClient client(100.f, 0.5f, 0.5f);
BrowserControlsOffsetManager* manager = client.manager();
......@@ -210,6 +242,33 @@ TEST(BrowserControlsOffsetManagerTest, PartialShownShowAnimation) {
EXPECT_FLOAT_EQ(100.f, manager->ContentTopOffset());
}
TEST(BrowserControlsOffsetManagerTest,
BottomControlsPartialShownShowAnimation) {
MockBrowserControlsOffsetManagerClient client(0.f, 0.5f, 0.5f);
client.SetBottomControlsHeight(100.f);
BrowserControlsOffsetManager* manager = client.manager();
manager->ScrollBegin();
manager->ScrollBy(gfx::Vector2dF(0.f, 20.f));
EXPECT_FLOAT_EQ(0.8f, manager->BottomControlsShownRatio());
EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
manager->ScrollEnd();
EXPECT_TRUE(manager->has_animation());
base::TimeTicks time = base::TimeTicks::Now();
float previous;
while (manager->has_animation()) {
previous = manager->BottomControlsShownRatio();
time = base::TimeDelta::FromMicroseconds(100) + time;
manager->Animate(time);
EXPECT_GT(manager->BottomControlsShownRatio(), previous);
}
EXPECT_FALSE(manager->has_animation());
EXPECT_FLOAT_EQ(1.f, manager->BottomControlsShownRatio());
EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
}
TEST(BrowserControlsOffsetManagerTest,
PartialHiddenWithAmbiguousThresholdShows) {
MockBrowserControlsOffsetManagerClient client(100.f, 0.25f, 0.25f);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment