| Index: cc/input/top_controls_manager_unittest.cc
 | 
| diff --git a/cc/input/top_controls_manager_unittest.cc b/cc/input/top_controls_manager_unittest.cc
 | 
| index 0be40ca581a4c9b6d97efa0440631e0754b0f2db..16d0e5d21b1b32e45c5f733aa5fcf18daa804ac8 100644
 | 
| --- a/cc/input/top_controls_manager_unittest.cc
 | 
| +++ b/cc/input/top_controls_manager_unittest.cc
 | 
| @@ -4,6 +4,8 @@
 | 
|  
 | 
|  #include "cc/input/top_controls_manager.h"
 | 
|  
 | 
| +#include <algorithm>
 | 
| +
 | 
|  #include "base/memory/scoped_ptr.h"
 | 
|  #include "base/time/time.h"
 | 
|  #include "cc/input/top_controls_manager_client.h"
 | 
| @@ -27,13 +29,13 @@ class MockTopControlsManagerClient : public TopControlsManagerClient {
 | 
|        : host_impl_(&proxy_, &shared_bitmap_manager_),
 | 
|          redraw_needed_(false),
 | 
|          update_draw_properties_needed_(false),
 | 
| -        top_controls_top_offset_(0.f),
 | 
| +        top_controls_shown_ratio_(1.f),
 | 
|          top_controls_height_(top_controls_height),
 | 
|          top_controls_show_threshold_(top_controls_show_threshold),
 | 
|          top_controls_hide_threshold_(top_controls_hide_threshold) {
 | 
| -    active_tree_ =
 | 
| -        LayerTreeImpl::create(&host_impl_, new SyncedProperty<ScaleGroup>,
 | 
| -                              new SyncedElasticOverscroll);
 | 
| +    active_tree_ = LayerTreeImpl::create(
 | 
| +        &host_impl_, new SyncedProperty<ScaleGroup>, new SyncedTopControls,
 | 
| +        new SyncedElasticOverscroll);
 | 
|      root_scroll_layer_ = LayerImpl::Create(active_tree_.get(), 1);
 | 
|    }
 | 
|  
 | 
| @@ -46,11 +48,17 @@ class MockTopControlsManagerClient : public TopControlsManagerClient {
 | 
|  
 | 
|    bool HaveRootScrollLayer() const override { return true; }
 | 
|  
 | 
| -  void SetControlsTopOffset(float offset) override {
 | 
| -    top_controls_top_offset_ = offset;
 | 
| +  float TopControlsHeight() const override { return top_controls_height_; }
 | 
| +
 | 
| +  void SetCurrentTopControlsShownRatio(float ratio) override {
 | 
| +    ratio = std::max(ratio, 0.f);
 | 
| +    ratio = std::min(ratio, 1.f);
 | 
| +    top_controls_shown_ratio_ = ratio;
 | 
|    }
 | 
|  
 | 
| -  float ControlsTopOffset() const override { return top_controls_top_offset_; }
 | 
| +  float CurrentTopControlsShownRatio() const override {
 | 
| +    return top_controls_shown_ratio_;
 | 
| +  }
 | 
|  
 | 
|    LayerImpl* rootScrollLayer() {
 | 
|      return root_scroll_layer_.get();
 | 
| @@ -61,11 +69,12 @@ class MockTopControlsManagerClient : public TopControlsManagerClient {
 | 
|        manager_ = TopControlsManager::Create(this,
 | 
|                                              top_controls_show_threshold_,
 | 
|                                              top_controls_hide_threshold_);
 | 
| -      manager_->SetTopControlsHeight(top_controls_height_);
 | 
|      }
 | 
|      return manager_.get();
 | 
|    }
 | 
|  
 | 
| +  void SetTopControlsHeight(float height) { top_controls_height_ = height; }
 | 
| +
 | 
|   private:
 | 
|    FakeImplProxy proxy_;
 | 
|    TestSharedBitmapManager shared_bitmap_manager_;
 | 
| @@ -76,7 +85,7 @@ class MockTopControlsManagerClient : public TopControlsManagerClient {
 | 
|    bool redraw_needed_;
 | 
|    bool update_draw_properties_needed_;
 | 
|  
 | 
| -  float top_controls_top_offset_;
 | 
| +  float top_controls_shown_ratio_;
 | 
|    float top_controls_height_;
 | 
|    float top_controls_show_threshold_;
 | 
|    float top_controls_hide_threshold_;
 | 
| @@ -90,38 +99,38 @@ TEST(TopControlsManagerTest, EnsureScrollThresholdApplied) {
 | 
|  
 | 
|    // Scroll down to hide the controls entirely.
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 30.f));
 | 
| -  EXPECT_EQ(-30.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-30.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 30.f));
 | 
| -  EXPECT_EQ(-60.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-60.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 100.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    // Scroll back up a bit and ensure the controls don't move until we cross
 | 
|    // the threshold.
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -10.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -50.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    // After hitting the threshold, further scrolling up should result in the top
 | 
|    // controls showing.
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -10.f));
 | 
| -  EXPECT_EQ(-90.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-90.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -50.f));
 | 
| -  EXPECT_EQ(-40.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-40.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    // Reset the scroll threshold by going further up the page than the initial
 | 
|    // threshold.
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -100.f));
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    // See that scrolling down the page now will result in the controls hiding.
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 20.f));
 | 
| -  EXPECT_EQ(-20.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-20.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    manager->ScrollEnd();
 | 
|  }
 | 
| @@ -131,29 +140,29 @@ TEST(TopControlsManagerTest, PartialShownHideAnimation) {
 | 
|    TopControlsManager* manager = client.manager();
 | 
|    manager->ScrollBegin();
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|    manager->ScrollEnd();
 | 
|  
 | 
|    manager->ScrollBegin();
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
 | 
| -  EXPECT_EQ(-85.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(15.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-85.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(15.f, manager->ContentTopOffset());
 | 
|    manager->ScrollEnd();
 | 
|  
 | 
|    EXPECT_TRUE(manager->animation());
 | 
|  
 | 
|    base::TimeTicks time = gfx::FrameTime::Now();
 | 
| -  float previous_offset = manager->ControlsTopOffset();
 | 
| +  float previous;
 | 
|    while (manager->animation()) {
 | 
| +    previous = manager->TopControlsShownRatio();
 | 
|      time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
|      manager->Animate(time);
 | 
| -    EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| +    EXPECT_LT(manager->TopControlsShownRatio(), previous);
 | 
|    }
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|  }
 | 
|  
 | 
|  TEST(TopControlsManagerTest, PartialShownShowAnimation) {
 | 
| @@ -161,29 +170,29 @@ TEST(TopControlsManagerTest, PartialShownShowAnimation) {
 | 
|    TopControlsManager* manager = client.manager();
 | 
|    manager->ScrollBegin();
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|    manager->ScrollEnd();
 | 
|  
 | 
|    manager->ScrollBegin();
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -70.f));
 | 
| -  EXPECT_EQ(-30.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(70.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-30.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(70.f, manager->ContentTopOffset());
 | 
|    manager->ScrollEnd();
 | 
|  
 | 
|    EXPECT_TRUE(manager->animation());
 | 
|  
 | 
|    base::TimeTicks time = gfx::FrameTime::Now();
 | 
| -  float previous_offset = manager->ControlsTopOffset();
 | 
| +  float previous;
 | 
|    while (manager->animation()) {
 | 
| +    previous = manager->TopControlsShownRatio();
 | 
|      time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
|      manager->Animate(time);
 | 
| -    EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| +    EXPECT_GT(manager->TopControlsShownRatio(), previous);
 | 
|    }
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(100.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(100.f, manager->ContentTopOffset());
 | 
|  }
 | 
|  
 | 
|  TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdShows) {
 | 
| @@ -193,23 +202,23 @@ TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdShows) {
 | 
|    manager->ScrollBegin();
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 20.f));
 | 
| -  EXPECT_EQ(-20.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(80.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-20.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(80.f, manager->ContentTopOffset());
 | 
|  
 | 
|    manager->ScrollEnd();
 | 
|    EXPECT_TRUE(manager->animation());
 | 
|  
 | 
|    base::TimeTicks time = gfx::FrameTime::Now();
 | 
| -  float previous_offset = manager->ControlsTopOffset();
 | 
| +  float previous;
 | 
|    while (manager->animation()) {
 | 
| +    previous = manager->TopControlsShownRatio();
 | 
|      time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
|      manager->Animate(time);
 | 
| -    EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| +    EXPECT_GT(manager->TopControlsShownRatio(), previous);
 | 
|    }
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(100.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(100.f, manager->ContentTopOffset());
 | 
|  }
 | 
|  
 | 
|  TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdHides) {
 | 
| @@ -219,23 +228,23 @@ TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdHides) {
 | 
|    manager->ScrollBegin();
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 30.f));
 | 
| -  EXPECT_EQ(-30.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(70.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-30.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(70.f, manager->ContentTopOffset());
 | 
|  
 | 
|    manager->ScrollEnd();
 | 
|    EXPECT_TRUE(manager->animation());
 | 
|  
 | 
|    base::TimeTicks time = gfx::FrameTime::Now();
 | 
| -  float previous_offset = manager->ControlsTopOffset();
 | 
| +  float previous;
 | 
|    while (manager->animation()) {
 | 
| +    previous = manager->TopControlsShownRatio();
 | 
|      time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
|      manager->Animate(time);
 | 
| -    EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| +    EXPECT_LT(manager->TopControlsShownRatio(), previous);
 | 
|    }
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|  }
 | 
|  
 | 
|  TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdHides) {
 | 
| @@ -243,29 +252,29 @@ TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdHides) {
 | 
|    TopControlsManager* manager = client.manager();
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|  
 | 
|    manager->ScrollBegin();
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -20.f));
 | 
| -  EXPECT_EQ(-80.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(20.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-80.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(20.f, manager->ContentTopOffset());
 | 
|  
 | 
|    manager->ScrollEnd();
 | 
|    EXPECT_TRUE(manager->animation());
 | 
|  
 | 
|    base::TimeTicks time = gfx::FrameTime::Now();
 | 
| -  float previous_offset = manager->ControlsTopOffset();
 | 
| +  float previous;
 | 
|    while (manager->animation()) {
 | 
| +    previous = manager->TopControlsShownRatio();
 | 
|      time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
|      manager->Animate(time);
 | 
| -    EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| +    EXPECT_LT(manager->TopControlsShownRatio(), previous);
 | 
|    }
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|  }
 | 
|  
 | 
|  TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdShows) {
 | 
| @@ -273,29 +282,29 @@ TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdShows) {
 | 
|    TopControlsManager* manager = client.manager();
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|  
 | 
|    manager->ScrollBegin();
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -30.f));
 | 
| -  EXPECT_EQ(-70.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(30.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-70.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(30.f, manager->ContentTopOffset());
 | 
|  
 | 
|    manager->ScrollEnd();
 | 
|    EXPECT_TRUE(manager->animation());
 | 
|  
 | 
|    base::TimeTicks time = gfx::FrameTime::Now();
 | 
| -  float previous_offset = manager->ControlsTopOffset();
 | 
| +  float previous;
 | 
|    while (manager->animation()) {
 | 
| +    previous = manager->TopControlsShownRatio();
 | 
|      time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
|      manager->Animate(time);
 | 
| -    EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| +    EXPECT_GT(manager->TopControlsShownRatio(), previous);
 | 
|    }
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(100.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(100.f, manager->ContentTopOffset());
 | 
|  }
 | 
|  
 | 
|  TEST(TopControlsManagerTest, PinchIgnoresScroll) {
 | 
| @@ -304,24 +313,24 @@ TEST(TopControlsManagerTest, PinchIgnoresScroll) {
 | 
|  
 | 
|    // Hide the controls.
 | 
|    manager->ScrollBegin();
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    manager->PinchBegin();
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    // Scrolls are ignored during pinch.
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
|    manager->PinchEnd();
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    // Scrolls should no long be ignored.
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
 | 
| -  EXPECT_EQ(-85.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(15.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-85.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(15.f, manager->ContentTopOffset());
 | 
|    manager->ScrollEnd();
 | 
|  
 | 
|    EXPECT_TRUE(manager->animation());
 | 
| @@ -333,7 +342,7 @@ TEST(TopControlsManagerTest, PinchBeginStartsAnimationIfNecessary) {
 | 
|  
 | 
|    manager->ScrollBegin();
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
|  
 | 
|    manager->PinchBegin();
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| @@ -342,19 +351,19 @@ TEST(TopControlsManagerTest, PinchBeginStartsAnimationIfNecessary) {
 | 
|    EXPECT_FALSE(manager->animation());
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
 | 
| -  EXPECT_EQ(-85.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(15.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-85.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(15.f, manager->ContentTopOffset());
 | 
|  
 | 
|    manager->PinchBegin();
 | 
|    EXPECT_TRUE(manager->animation());
 | 
|  
 | 
|    base::TimeTicks time = base::TimeTicks::Now();
 | 
| -  float previous_offset = manager->ControlsTopOffset();
 | 
| +  float previous;
 | 
|    while (manager->animation()) {
 | 
| +    previous = manager->TopControlsShownRatio();
 | 
|      time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
|      manager->Animate(time);
 | 
| -    EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| +    EXPECT_LT(manager->TopControlsShownRatio(), previous);
 | 
|    }
 | 
|    EXPECT_FALSE(manager->animation());
 | 
|  
 | 
| @@ -362,99 +371,79 @@ TEST(TopControlsManagerTest, PinchBeginStartsAnimationIfNecessary) {
 | 
|    EXPECT_FALSE(manager->animation());
 | 
|  
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, -55.f));
 | 
| -  EXPECT_EQ(-45.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(55.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-45.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(55.f, manager->ContentTopOffset());
 | 
|    EXPECT_FALSE(manager->animation());
 | 
|  
 | 
|    manager->ScrollEnd();
 | 
|    EXPECT_TRUE(manager->animation());
 | 
|  
 | 
|    time = base::TimeTicks::Now();
 | 
| -  previous_offset = manager->ControlsTopOffset();
 | 
|    while (manager->animation()) {
 | 
| +    previous = manager->TopControlsShownRatio();
 | 
|      time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
|      manager->Animate(time);
 | 
| -    EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| +    EXPECT_GT(manager->TopControlsShownRatio(), previous);
 | 
|    }
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ControlsTopOffset());
 | 
|  }
 | 
|  
 | 
|  TEST(TopControlsManagerTest, HeightChangeMaintainsFullyVisibleControls) {
 | 
|    MockTopControlsManagerClient client(0.f, 0.5f, 0.5f);
 | 
|    TopControlsManager* manager = client.manager();
 | 
|  
 | 
| -  EXPECT_EQ(0.f, manager->top_controls_height());
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ControlsTopOffset());
 | 
|  
 | 
| -  manager->SetTopControlsHeight(100.f);
 | 
| +  client.SetTopControlsHeight(100.f);
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(100.f, manager->top_controls_height());
 | 
| -  EXPECT_EQ(0, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(100.f, manager->TopControlsHeight());
 | 
| +  EXPECT_FLOAT_EQ(0, manager->ControlsTopOffset());
 | 
|  
 | 
| -  manager->SetTopControlsHeight(50.f);
 | 
| +  client.SetTopControlsHeight(50.f);
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(50.f, manager->top_controls_height());
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(50.f, manager->TopControlsHeight());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ControlsTopOffset());
 | 
|  }
 | 
|  
 | 
| -TEST(TopControlsManagerTest, ShrinkingHeightKeepsTopControlsHidden) {
 | 
| -  MockTopControlsManagerClient client(100.f, 0.5f, 0.5f);
 | 
| +TEST(TopControlsManagerTest, GrowingHeightKeepsTopControlsHidden) {
 | 
| +  MockTopControlsManagerClient client(0.f, 0.5f, 0.5f);
 | 
|    TopControlsManager* manager = client.manager();
 | 
| -
 | 
| -  manager->ScrollBegin();
 | 
| -  manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
 | 
| -  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  manager->UpdateTopControlsState(HIDDEN, HIDDEN, false);
 | 
| +  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
|    EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
| -  manager->ScrollEnd();
 | 
|  
 | 
| -  manager->SetTopControlsHeight(50.f);
 | 
| +  client.SetTopControlsHeight(50.f);
 | 
|    EXPECT_FALSE(manager->animation());
 | 
|    EXPECT_EQ(-50.f, manager->ControlsTopOffset());
 | 
|    EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
|  
 | 
| -  manager->SetTopControlsHeight(0.f);
 | 
| +  client.SetTopControlsHeight(100.f);
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
 | 
|    EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
|  }
 | 
|  
 | 
| -TEST(TopControlsManagerTest, HiddenTopControlsReadjustOnIncreasedHeight) {
 | 
| -  MockTopControlsManagerClient client(10.f, 0.5f, 0.5f);
 | 
| +TEST(TopControlsManagerTest, ShrinkingHeightKeepsTopControlsHidden) {
 | 
| +  MockTopControlsManagerClient client(100.f, 0.5f, 0.5f);
 | 
|    TopControlsManager* manager = client.manager();
 | 
|  
 | 
|    manager->ScrollBegin();
 | 
|    manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
 | 
| -  EXPECT_EQ(-10.f, manager->ControlsTopOffset());
 | 
| -  EXPECT_EQ(0.f, manager->ContentTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-100.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|    manager->ScrollEnd();
 | 
|  
 | 
| -  manager->SetTopControlsHeight(15.f);
 | 
| -  EXPECT_TRUE(manager->animation());
 | 
| -  base::TimeTicks time = base::TimeTicks::Now();
 | 
| -  float previous_offset = manager->ControlsTopOffset();
 | 
| -  while (manager->animation()) {
 | 
| -    time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
| -    manager->Animate(time);
 | 
| -    EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| -  }
 | 
| +  client.SetTopControlsHeight(50.f);
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(-15.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(-50.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|  
 | 
| -  manager->SetTopControlsHeight(35.f);
 | 
| -  EXPECT_TRUE(manager->animation());
 | 
| -  time = base::TimeTicks::Now();
 | 
| -  previous_offset = manager->ControlsTopOffset();
 | 
| -  while (manager->animation()) {
 | 
| -    time = base::TimeDelta::FromMicroseconds(100) + time;
 | 
| -    manager->Animate(time);
 | 
| -    EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
 | 
| -    previous_offset = manager->ControlsTopOffset();
 | 
| -  }
 | 
| +  client.SetTopControlsHeight(0.f);
 | 
|    EXPECT_FALSE(manager->animation());
 | 
| -  EXPECT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ControlsTopOffset());
 | 
| +  EXPECT_FLOAT_EQ(0.f, manager->ContentTopOffset());
 | 
|  }
 | 
| +
 | 
|  }  // namespace
 | 
|  }  // namespace cc
 | 
| 
 |