diff options
author | vollick@chromium.org <vollick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-06 02:24:11 +0000 |
---|---|---|
committer | vollick@chromium.org <vollick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-06 02:24:11 +0000 |
commit | 94d86c6293f72e74b00e7cae5cd339f9ff441114 (patch) | |
tree | d6d90a358a760f90e1a275b95f1334c820ab0987 | |
parent | 02e071cf35c16c1c402a960d3cb1dda31e14b0c7 (diff) | |
download | chromium_src-94d86c6293f72e74b00e7cae5cd339f9ff441114.zip chromium_src-94d86c6293f72e74b00e7cae5cd339f9ff441114.tar.gz chromium_src-94d86c6293f72e74b00e7cae5cd339f9ff441114.tar.bz2 |
LayerImpl::tryScroll should return false when max scroll offset is zero.
If the max scroll offset is zero in both dimensions, we can't scroll, so despite
the fact that we may be technically scrollable (i.e., LayerImpl::scrollable()
returns true), we aren't effectively scrollable and should return ScrollIgnored.
BUG=170953
Review URL: https://chromiumcodereview.appspot.com/12224013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@180867 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | cc/layer_impl.cc | 5 | ||||
-rw-r--r-- | cc/layer_tree_host_unittest_scroll.cc | 43 |
2 files changed, 48 insertions, 0 deletions
diff --git a/cc/layer_impl.cc b/cc/layer_impl.cc index dcf531f..8545e42 100644 --- a/cc/layer_impl.cc +++ b/cc/layer_impl.cc @@ -279,6 +279,11 @@ InputHandlerClient::ScrollStatus LayerImpl::tryScroll(const gfx::PointF& screenS return InputHandlerClient::ScrollIgnored; } + if (m_maxScrollOffset.x() <= 0 && m_maxScrollOffset.y() <= 0) { + TRACE_EVENT0("cc", "LayerImpl::tryScroll: Ignored. Technically scrollable, but has no affordance in either direction."); + return InputHandlerClient::ScrollIgnored; + } + return InputHandlerClient::ScrollStarted; } diff --git a/cc/layer_tree_host_unittest_scroll.cc b/cc/layer_tree_host_unittest_scroll.cc index bfb5e5f..430af5c 100644 --- a/cc/layer_tree_host_unittest_scroll.cc +++ b/cc/layer_tree_host_unittest_scroll.cc @@ -618,5 +618,48 @@ class ImplSidePaintingScrollTestSimple : public ImplSidePaintingScrollTest { MULTI_THREAD_TEST_F(ImplSidePaintingScrollTestSimple); +class LayerTreeHostScrollTestScrollZeroMaxScrollOffset + : public LayerTreeHostScrollTest { + public: + LayerTreeHostScrollTestScrollZeroMaxScrollOffset() {} + + virtual void beginTest() OVERRIDE { + postSetNeedsCommitToMainThread(); + } + + virtual void drawLayersOnThread(LayerTreeHostImpl* impl) OVERRIDE { + LayerImpl* root = impl->rootLayer(); + root->setScrollable(true); + + root->setMaxScrollOffset(gfx::Vector2d(100, 100)); + EXPECT_EQ( + InputHandlerClient::ScrollStarted, + root->tryScroll( + gfx::PointF(0.0f, 1.0f), + InputHandlerClient::Gesture)); + + root->setMaxScrollOffset(gfx::Vector2d(0, 0)); + EXPECT_EQ( + InputHandlerClient::ScrollIgnored, + root->tryScroll( + gfx::PointF(0.0f, 1.0f), + InputHandlerClient::Gesture)); + + root->setMaxScrollOffset(gfx::Vector2d(-100, -100)); + EXPECT_EQ( + InputHandlerClient::ScrollIgnored, + root->tryScroll( + gfx::PointF(0.0f, 1.0f), + InputHandlerClient::Gesture)); + + endTest(); + } + + virtual void afterTest() OVERRIDE {} +}; + +SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostScrollTestScrollZeroMaxScrollOffset) + + } // namespace } // namespace cc |