// Tests that ending an overscroll animation doesn't leave around state that // confuses the next overscroll animation. TEST_F(APZCBasicTester, OverScroll_Bug1152051b) { SCOPED_GFX_PREF(APZOverscrollEnabled, bool, true); SCOPED_GFX_PREF(APZOverscrollStopDistanceThreshold, float, 0.1f); // Pan sufficiently to hit overscroll behavior PanIntoOverscroll(); // Sample animations once, to give the fling animation started on touch-up // a chance to realize it's overscrolled, and schedule a call to // HandleFlingOverscroll(). SampleAnimationOnce(); // This advances the time and runs the HandleFlingOverscroll task scheduled in // the previous call, which starts an overscroll animation. It then samples // the overscroll animation once, to get it to initialize the first overscroll // sample. SampleAnimationOnce(); // Do a touch-down to cancel the overscroll animation, and then a touch-up // to schedule a new one since we're still overscrolled. We don't pan because // panning can trigger functions that clear the overscroll animation state // in other ways. TouchDown(apzc, ScreenIntPoint(10, 10), mcc->Time(), nullptr); TouchUp(apzc, ScreenIntPoint(10, 10), mcc->Time()); // Sample the second overscroll animation to its end. // If the ending of the first overscroll animation fails to clear state // properly, this will assert. ParentLayerPoint expectedScrollOffset(0, GetScrollRange().YMost()); SampleAnimationUntilRecoveredFromOverscroll(expectedScrollOffset); }
void APZCBasicTester::TestOverscroll() { // Pan sufficiently to hit overscroll behavior PanIntoOverscroll(); // Check that we recover from overscroll via an animation. ParentLayerPoint expectedScrollOffset(0, GetScrollRange().YMost()); SampleAnimationUntilRecoveredFromOverscroll(expectedScrollOffset); }