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