12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/input/top_controls_manager.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/input/top_controls_manager_client.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/layer_impl.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/fake_impl_proxy.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/test/fake_layer_tree_host_impl.h"
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "cc/test/test_shared_bitmap_manager.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/layer_tree_impl.h"
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/gfx/frame_time.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/vector2d_f.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static const float kTopControlsHeight = 100;
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockTopControlsManagerClient : public TopControlsManagerClient {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockTopControlsManagerClient(float top_controls_show_threshold,
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               float top_controls_hide_threshold)
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      : host_impl_(&proxy_, &shared_bitmap_manager_),
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        redraw_needed_(false),
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        update_draw_properties_needed_(false),
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        top_controls_top_offset_(0.f),
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        top_controls_show_threshold_(top_controls_show_threshold),
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        top_controls_hide_threshold_(top_controls_hide_threshold) {
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    active_tree_ = LayerTreeImpl::create(&host_impl_);
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    root_scroll_layer_ = LayerImpl::Create(active_tree_.get(), 1);
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~MockTopControlsManagerClient() {}
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void DidChangeTopControlsPosition() OVERRIDE {
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    redraw_needed_ = true;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    update_draw_properties_needed_ = true;
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual bool HaveRootScrollLayer() const OVERRIDE {
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return true;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetControlsTopOffset(float offset) OVERRIDE {
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    top_controls_top_offset_ = offset;
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual float ControlsTopOffset() const OVERRIDE {
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return top_controls_top_offset_;
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  LayerImpl* rootScrollLayer() {
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return root_scroll_layer_.get();
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopControlsManager* manager() {
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (!manager_) {
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      manager_ = TopControlsManager::Create(this,
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            kTopControlsHeight,
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            top_controls_show_threshold_,
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                            top_controls_hide_threshold_);
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return manager_.get();
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FakeImplProxy proxy_;
7323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  TestSharedBitmapManager shared_bitmap_manager_;
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FakeLayerTreeHostImpl host_impl_;
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerTreeImpl> active_tree_;
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<LayerImpl> root_scroll_layer_;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<TopControlsManager> manager_;
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool redraw_needed_;
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool update_draw_properties_needed_;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float top_controls_top_offset_;
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float top_controls_show_threshold_;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  float top_controls_hide_threshold_;
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TopControlsManagerTest, EnsureScrollThresholdApplied) {
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockTopControlsManagerClient client(0.5f, 0.5f);
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopControlsManager* manager = client.manager();
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBegin();
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Scroll down to hide the controls entirely.
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 30.f));
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-30.f, manager->ControlsTopOffset());
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 30.f));
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-60.f, manager->ControlsTopOffset());
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 100.f));
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Scroll back up a bit and ensure the controls don't move until we cross
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the threshold.
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -10.f));
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -50.f));
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // After hitting the threshold, further scrolling up should result in the top
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // controls showing.
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -10.f));
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-90.f, manager->ControlsTopOffset());
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -50.f));
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-40.f, manager->ControlsTopOffset());
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Reset the scroll threshold by going further up the page than the initial
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // threshold.
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -100.f));
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ControlsTopOffset());
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // See that scrolling down the page now will result in the controls hiding.
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 20.f));
1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-20.f, manager->ControlsTopOffset());
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollEnd();
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TopControlsManagerTest, PartialShownHideAnimation) {
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockTopControlsManagerClient client(0.5f, 0.5f);
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopControlsManager* manager = client.manager();
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBegin();
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ContentTopOffset());
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollEnd();
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBegin();
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-85.f, manager->ControlsTopOffset());
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(15.f, manager->ContentTopOffset());
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollEnd();
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(manager->animation());
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::TimeTicks time = gfx::FrameTime::Now();
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float previous_offset = manager->ControlsTopOffset();
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  while (manager->animation()) {
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    time = base::TimeDelta::FromMicroseconds(100) + time;
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    manager->Animate(time);
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    previous_offset = manager->ControlsTopOffset();
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(manager->animation());
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ContentTopOffset());
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TopControlsManagerTest, PartialShownShowAnimation) {
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockTopControlsManagerClient client(0.5f, 0.5f);
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopControlsManager* manager = client.manager();
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBegin();
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ContentTopOffset());
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollEnd();
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBegin();
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -70.f));
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-30.f, manager->ControlsTopOffset());
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(70.f, manager->ContentTopOffset());
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollEnd();
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(manager->animation());
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::TimeTicks time = gfx::FrameTime::Now();
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float previous_offset = manager->ControlsTopOffset();
179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  while (manager->animation()) {
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    time = base::TimeDelta::FromMicroseconds(100) + time;
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    manager->Animate(time);
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    previous_offset = manager->ControlsTopOffset();
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(manager->animation());
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ControlsTopOffset());
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(100.f, manager->ContentTopOffset());
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdShows) {
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockTopControlsManagerClient client(0.25f, 0.25f);
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopControlsManager* manager = client.manager();
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBegin();
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 20.f));
1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-20.f, manager->ControlsTopOffset());
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(80.f, manager->ContentTopOffset());
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollEnd();
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(manager->animation());
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::TimeTicks time = gfx::FrameTime::Now();
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float previous_offset = manager->ControlsTopOffset();
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  while (manager->animation()) {
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    time = base::TimeDelta::FromMicroseconds(100) + time;
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    manager->Animate(time);
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    previous_offset = manager->ControlsTopOffset();
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(manager->animation());
2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ControlsTopOffset());
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(100.f, manager->ContentTopOffset());
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdHides) {
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockTopControlsManagerClient client(0.25f, 0.25f);
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopControlsManager* manager = client.manager();
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBegin();
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 30.f));
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-30.f, manager->ControlsTopOffset());
2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(70.f, manager->ContentTopOffset());
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollEnd();
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(manager->animation());
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::TimeTicks time = gfx::FrameTime::Now();
2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float previous_offset = manager->ControlsTopOffset();
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  while (manager->animation()) {
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    time = base::TimeDelta::FromMicroseconds(100) + time;
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    manager->Animate(time);
2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    previous_offset = manager->ControlsTopOffset();
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(manager->animation());
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ContentTopOffset());
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdHides) {
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockTopControlsManagerClient client(0.25f, 0.25f);
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopControlsManager* manager = client.manager();
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ContentTopOffset());
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBegin();
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -20.f));
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-80.f, manager->ControlsTopOffset());
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(20.f, manager->ContentTopOffset());
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollEnd();
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(manager->animation());
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::TimeTicks time = gfx::FrameTime::Now();
2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float previous_offset = manager->ControlsTopOffset();
261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  while (manager->animation()) {
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    time = base::TimeDelta::FromMicroseconds(100) + time;
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    manager->Animate(time);
2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    previous_offset = manager->ControlsTopOffset();
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(manager->animation());
2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ContentTopOffset());
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdShows) {
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MockTopControlsManagerClient client(0.25f, 0.25f);
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TopControlsManager* manager = client.manager();
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ContentTopOffset());
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBegin();
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -30.f));
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-70.f, manager->ControlsTopOffset());
2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(30.f, manager->ContentTopOffset());
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  manager->ScrollEnd();
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(manager->animation());
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::TimeTicks time = gfx::FrameTime::Now();
2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float previous_offset = manager->ControlsTopOffset();
291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  while (manager->animation()) {
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    time = base::TimeDelta::FromMicroseconds(100) + time;
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    manager->Animate(time);
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    previous_offset = manager->ControlsTopOffset();
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(manager->animation());
2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ControlsTopOffset());
2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(100.f, manager->ContentTopOffset());
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3021e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST(TopControlsManagerTest, PinchIgnoresScroll) {
3031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  MockTopControlsManagerClient client(0.5f, 0.5f);
3041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  TopControlsManager* manager = client.manager();
3051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Hide the controls.
3071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollBegin();
3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ControlsTopOffset());
3091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
3121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->PinchBegin();
3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Scrolls are ignored during pinch.
3171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
3191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->PinchEnd();
3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
3211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Scrolls should no long be ignored.
3231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-85.f, manager->ControlsTopOffset());
3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(15.f, manager->ContentTopOffset());
3261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollEnd();
3271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(manager->animation());
3291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
3301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)TEST(TopControlsManagerTest, PinchBeginStartsAnimationIfNecessary) {
3321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  MockTopControlsManagerClient client(0.5f, 0.5f);
3331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  TopControlsManager* manager = client.manager();
3341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollBegin();
3361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-100.f, manager->ControlsTopOffset());
3381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->PinchBegin();
3401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_FALSE(manager->animation());
3411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->PinchEnd();
3431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_FALSE(manager->animation());
3441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -15.f));
3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-85.f, manager->ControlsTopOffset());
3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(15.f, manager->ContentTopOffset());
3481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->PinchBegin();
3501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(manager->animation());
3511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::TimeTicks time = base::TimeTicks::Now();
3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  float previous_offset = manager->ControlsTopOffset();
3541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  while (manager->animation()) {
3551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    time = base::TimeDelta::FromMicroseconds(100) + time;
3561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    manager->Animate(time);
3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    previous_offset = manager->ControlsTopOffset();
3591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
3601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_FALSE(manager->animation());
3611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->PinchEnd();
3631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_FALSE(manager->animation());
3641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollBy(gfx::Vector2dF(0.f, -55.f));
3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(-45.f, manager->ControlsTopOffset());
3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(55.f, manager->ContentTopOffset());
3681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_FALSE(manager->animation());
3691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  manager->ScrollEnd();
3711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_TRUE(manager->animation());
3721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  time = base::TimeTicks::Now();
3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  previous_offset = manager->ControlsTopOffset();
3751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  while (manager->animation()) {
3761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    time = base::TimeDelta::FromMicroseconds(100) + time;
3771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    manager->Animate(time);
3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    previous_offset = manager->ControlsTopOffset();
3801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
3811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  EXPECT_FALSE(manager->animation());
3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0.f, manager->ControlsTopOffset());
3831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
3841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
387