| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2015 Google Inc. All rights reserved. | 2 * Copyright (C) 2015 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 } | 133 } |
| 134 VisualViewport& visualViewport() const { | 134 VisualViewport& visualViewport() const { |
| 135 return m_helper.webView()->page()->frameHost().visualViewport(); | 135 return m_helper.webView()->page()->frameHost().visualViewport(); |
| 136 } | 136 } |
| 137 | 137 |
| 138 private: | 138 private: |
| 139 std::string m_baseURL; | 139 std::string m_baseURL; |
| 140 FrameTestHelpers::WebViewHelper m_helper; | 140 FrameTestHelpers::WebViewHelper m_helper; |
| 141 }; | 141 }; |
| 142 | 142 |
| 143 #define EXPECT_POINT_EQ(expected, actual) \ | 143 #define EXPECT_SIZE_EQ(expected, actual) \ |
| 144 do { \ | 144 do { \ |
| 145 EXPECT_DOUBLE_EQ((expected).x(), (actual).x()); \ | 145 EXPECT_FLOAT_EQ((expected).width(), (actual).width()); \ |
| 146 EXPECT_DOUBLE_EQ((expected).y(), (actual).y()); \ | 146 EXPECT_FLOAT_EQ((expected).height(), (actual).height()); \ |
| 147 } while (false) | 147 } while (false) |
| 148 | 148 |
| 149 // Disable these tests on Mac OSX until further investigation. | 149 // Disable these tests on Mac OSX until further investigation. |
| 150 // Local build on Mac is OK but the bot fails. This is not an issue as | 150 // Local build on Mac is OK but the bot fails. This is not an issue as |
| 151 // Top Controls are currently only used on Android. | 151 // Top Controls are currently only used on Android. |
| 152 #if OS(MACOSX) | 152 #if OS(MACOSX) |
| 153 #define MAYBE(test) DISABLED_##test | 153 #define MAYBE(test) DISABLED_##test |
| 154 #else | 154 #else |
| 155 #define MAYBE(test) test | 155 #define MAYBE(test) test |
| 156 #endif | 156 #endif |
| 157 | 157 |
| 158 // Scrolling down should hide top controls. | 158 // Scrolling down should hide top controls. |
| 159 TEST_F(TopControlsTest, MAYBE(HideOnScrollDown)) { | 159 TEST_F(TopControlsTest, MAYBE(HideOnScrollDown)) { |
| 160 WebViewImpl* webView = initialize(); | 160 WebViewImpl* webView = initialize(); |
| 161 // initialize top controls to be shown. | 161 // initialize top controls to be shown. |
| 162 webView->resizeWithTopControls(webView->size(), 50.f, true); | 162 webView->resizeWithTopControls(webView->size(), 50.f, true); |
| 163 webView->topControls().setShownRatio(1); | 163 webView->topControls().setShownRatio(1); |
| 164 | 164 |
| 165 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 165 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 166 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 166 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 167 | 167 |
| 168 // Top controls should be scrolled partially and page should not scroll. | 168 // Top controls should be scrolled partially and page should not scroll. |
| 169 webView->handleInputEvent( | 169 webView->handleInputEvent( |
| 170 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -25.f)); | 170 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -25.f)); |
| 171 EXPECT_FLOAT_EQ(25.f, webView->topControls().contentOffset()); | 171 EXPECT_FLOAT_EQ(25.f, webView->topControls().contentOffset()); |
| 172 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->scrollPosition()); | 172 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frame()->view()->scrollOffset()); |
| 173 | 173 |
| 174 // Top controls should consume 25px and become hidden. Excess scroll should be
consumed by the page. | 174 // Top controls should consume 25px and become hidden. Excess scroll should be
consumed by the page. |
| 175 webView->handleInputEvent( | 175 webView->handleInputEvent( |
| 176 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); | 176 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); |
| 177 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 177 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 178 EXPECT_POINT_EQ(IntPoint(0, 15), frame()->view()->scrollPosition()); | 178 EXPECT_SIZE_EQ(ScrollOffset(0, 15), frame()->view()->scrollOffset()); |
| 179 | 179 |
| 180 // Only page should consume scroll | 180 // Only page should consume scroll |
| 181 webView->handleInputEvent( | 181 webView->handleInputEvent( |
| 182 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f)); | 182 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f)); |
| 183 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 183 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 184 EXPECT_POINT_EQ(IntPoint(0, 35), frame()->view()->scrollPosition()); | 184 EXPECT_SIZE_EQ(ScrollOffset(0, 35), frame()->view()->scrollOffset()); |
| 185 } | 185 } |
| 186 | 186 |
| 187 // Scrolling up should show top controls. | 187 // Scrolling up should show top controls. |
| 188 TEST_F(TopControlsTest, MAYBE(ShowOnScrollUp)) { | 188 TEST_F(TopControlsTest, MAYBE(ShowOnScrollUp)) { |
| 189 WebViewImpl* webView = initialize(); | 189 WebViewImpl* webView = initialize(); |
| 190 // initialize top controls to be hidden. | 190 // initialize top controls to be hidden. |
| 191 webView->resizeWithTopControls(webView->size(), 50.f, false); | 191 webView->resizeWithTopControls(webView->size(), 50.f, false); |
| 192 webView->topControls().setShownRatio(0); | 192 webView->topControls().setShownRatio(0); |
| 193 | 193 |
| 194 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 194 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 195 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 195 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 196 | 196 |
| 197 webView->handleInputEvent( | 197 webView->handleInputEvent( |
| 198 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f)); | 198 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f)); |
| 199 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); | 199 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); |
| 200 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->scrollPosition()); | 200 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frame()->view()->scrollOffset()); |
| 201 | 201 |
| 202 webView->handleInputEvent( | 202 webView->handleInputEvent( |
| 203 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f)); | 203 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f)); |
| 204 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 204 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 205 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->scrollPosition()); | 205 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frame()->view()->scrollOffset()); |
| 206 } | 206 } |
| 207 | 207 |
| 208 // Scrolling up after previous scroll downs should cause top controls to be | 208 // Scrolling up after previous scroll downs should cause top controls to be |
| 209 // shown only after all previously scrolled down amount is compensated. | 209 // shown only after all previously scrolled down amount is compensated. |
| 210 TEST_F(TopControlsTest, MAYBE(ScrollDownThenUp)) { | 210 TEST_F(TopControlsTest, MAYBE(ScrollDownThenUp)) { |
| 211 WebViewImpl* webView = initialize(); | 211 WebViewImpl* webView = initialize(); |
| 212 // initialize top controls to be shown and position page at 100px. | 212 // initialize top controls to be shown and position page at 100px. |
| 213 webView->resizeWithTopControls(webView->size(), 50.f, true); | 213 webView->resizeWithTopControls(webView->size(), 50.f, true); |
| 214 webView->topControls().setShownRatio(1); | 214 webView->topControls().setShownRatio(1); |
| 215 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), | 215 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), |
| 216 ProgrammaticScroll); | 216 ProgrammaticScroll); |
| 217 | 217 |
| 218 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 218 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 219 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 219 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 220 | 220 |
| 221 // Scroll down to completely hide top controls. Excess deltaY (100px) should b
e consumed by the page. | 221 // Scroll down to completely hide top controls. Excess deltaY (100px) should b
e consumed by the page. |
| 222 webView->handleInputEvent( | 222 webView->handleInputEvent( |
| 223 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -150.f)); | 223 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -150.f)); |
| 224 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 224 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 225 EXPECT_POINT_EQ(IntPoint(0, 200), frame()->view()->scrollPosition()); | 225 EXPECT_SIZE_EQ(ScrollOffset(0, 200), frame()->view()->scrollOffset()); |
| 226 | 226 |
| 227 // Scroll up and ensure the top controls does not move until we recover 100px
previously scrolled. | 227 // Scroll up and ensure the top controls does not move until we recover 100px
previously scrolled. |
| 228 webView->handleInputEvent( | 228 webView->handleInputEvent( |
| 229 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 40.f)); | 229 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 40.f)); |
| 230 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 230 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 231 EXPECT_POINT_EQ(IntPoint(0, 160), frame()->view()->scrollPosition()); | 231 EXPECT_SIZE_EQ(ScrollOffset(0, 160), frame()->view()->scrollOffset()); |
| 232 | 232 |
| 233 webView->handleInputEvent( | 233 webView->handleInputEvent( |
| 234 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 60.f)); | 234 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 60.f)); |
| 235 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 235 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 236 EXPECT_POINT_EQ(IntPoint(0, 100), frame()->view()->scrollPosition()); | 236 EXPECT_SIZE_EQ(ScrollOffset(0, 100), frame()->view()->scrollOffset()); |
| 237 | 237 |
| 238 // Now we have hit the threshold so further scroll up should be consumed by to
p controls. | 238 // Now we have hit the threshold so further scroll up should be consumed by to
p controls. |
| 239 webView->handleInputEvent( | 239 webView->handleInputEvent( |
| 240 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 30.f)); | 240 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 30.f)); |
| 241 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); | 241 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); |
| 242 EXPECT_POINT_EQ(IntPoint(0, 100), frame()->view()->scrollPosition()); | 242 EXPECT_SIZE_EQ(ScrollOffset(0, 100), frame()->view()->scrollOffset()); |
| 243 | 243 |
| 244 // Once top control is fully shown then page should consume any excess scroll. | 244 // Once top control is fully shown then page should consume any excess scroll. |
| 245 webView->handleInputEvent( | 245 webView->handleInputEvent( |
| 246 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 70.f)); | 246 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 70.f)); |
| 247 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 247 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 248 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 248 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset()); |
| 249 } | 249 } |
| 250 | 250 |
| 251 // Scrolling down should always cause visible top controls to start hiding even | 251 // Scrolling down should always cause visible top controls to start hiding even |
| 252 // if we have been scrolling up previously. | 252 // if we have been scrolling up previously. |
| 253 TEST_F(TopControlsTest, MAYBE(ScrollUpThenDown)) { | 253 TEST_F(TopControlsTest, MAYBE(ScrollUpThenDown)) { |
| 254 WebViewImpl* webView = initialize(); | 254 WebViewImpl* webView = initialize(); |
| 255 // initialize top controls to be hidden and position page at 100px. | 255 // initialize top controls to be hidden and position page at 100px. |
| 256 webView->resizeWithTopControls(webView->size(), 50.f, false); | 256 webView->resizeWithTopControls(webView->size(), 50.f, false); |
| 257 webView->topControls().setShownRatio(0); | 257 webView->topControls().setShownRatio(0); |
| 258 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), | 258 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), |
| 259 ProgrammaticScroll); | 259 ProgrammaticScroll); |
| 260 | 260 |
| 261 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 261 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 262 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 262 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 263 | 263 |
| 264 // Scroll up to completely show top controls. Excess deltaY (50px) should be c
onsumed by the page. | 264 // Scroll up to completely show top controls. Excess deltaY (50px) should be c
onsumed by the page. |
| 265 webView->handleInputEvent( | 265 webView->handleInputEvent( |
| 266 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 100.f)); | 266 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 100.f)); |
| 267 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 267 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 268 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 268 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset()); |
| 269 | 269 |
| 270 // Scroll down and ensure only top controls is scrolled | 270 // Scroll down and ensure only top controls is scrolled |
| 271 webView->handleInputEvent( | 271 webView->handleInputEvent( |
| 272 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); | 272 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); |
| 273 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); | 273 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); |
| 274 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 274 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset()); |
| 275 | 275 |
| 276 webView->handleInputEvent( | 276 webView->handleInputEvent( |
| 277 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -60.f)); | 277 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -60.f)); |
| 278 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 278 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 279 EXPECT_POINT_EQ(IntPoint(0, 100), frame()->view()->scrollPosition()); | 279 EXPECT_SIZE_EQ(ScrollOffset(0, 100), frame()->view()->scrollOffset()); |
| 280 } | 280 } |
| 281 | 281 |
| 282 // Top controls should not consume horizontal scroll. | 282 // Top controls should not consume horizontal scroll. |
| 283 TEST_F(TopControlsTest, MAYBE(HorizontalScroll)) { | 283 TEST_F(TopControlsTest, MAYBE(HorizontalScroll)) { |
| 284 WebViewImpl* webView = initialize(); | 284 WebViewImpl* webView = initialize(); |
| 285 // initialize top controls to be shown. | 285 // initialize top controls to be shown. |
| 286 webView->resizeWithTopControls(webView->size(), 50.f, true); | 286 webView->resizeWithTopControls(webView->size(), 50.f, true); |
| 287 webView->topControls().setShownRatio(1); | 287 webView->topControls().setShownRatio(1); |
| 288 | 288 |
| 289 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 289 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 290 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 290 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 291 | 291 |
| 292 // Top controls should not consume horizontal scroll. | 292 // Top controls should not consume horizontal scroll. |
| 293 webView->handleInputEvent( | 293 webView->handleInputEvent( |
| 294 generateEvent(WebInputEvent::GestureScrollUpdate, -110.f, -100.f)); | 294 generateEvent(WebInputEvent::GestureScrollUpdate, -110.f, -100.f)); |
| 295 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 295 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 296 EXPECT_POINT_EQ(IntPoint(110, 50), frame()->view()->scrollPosition()); | 296 EXPECT_SIZE_EQ(ScrollOffset(110, 50), frame()->view()->scrollOffset()); |
| 297 | 297 |
| 298 webView->handleInputEvent( | 298 webView->handleInputEvent( |
| 299 generateEvent(WebInputEvent::GestureScrollUpdate, -40.f, 0)); | 299 generateEvent(WebInputEvent::GestureScrollUpdate, -40.f, 0)); |
| 300 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 300 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 301 EXPECT_POINT_EQ(IntPoint(150, 50), frame()->view()->scrollPosition()); | 301 EXPECT_SIZE_EQ(ScrollOffset(150, 50), frame()->view()->scrollOffset()); |
| 302 } | 302 } |
| 303 | 303 |
| 304 // Page scale should not impact top controls scrolling | 304 // Page scale should not impact top controls scrolling |
| 305 TEST_F(TopControlsTest, MAYBE(PageScaleHasNoImpact)) { | 305 TEST_F(TopControlsTest, MAYBE(PageScaleHasNoImpact)) { |
| 306 WebViewImpl* webView = initialize(); | 306 WebViewImpl* webView = initialize(); |
| 307 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); | 307 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); |
| 308 webView->setPageScaleFactor(2.0); | 308 webView->setPageScaleFactor(2.0); |
| 309 | 309 |
| 310 // Initialize top controls to be shown. | 310 // Initialize top controls to be shown. |
| 311 webView->resizeWithTopControls(webView->size(), 50.f, true); | 311 webView->resizeWithTopControls(webView->size(), 50.f, true); |
| 312 webView->topControls().setShownRatio(1); | 312 webView->topControls().setShownRatio(1); |
| 313 | 313 |
| 314 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 314 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 315 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 315 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 316 | 316 |
| 317 // Top controls should be scrolled partially and page should not scroll. | 317 // Top controls should be scrolled partially and page should not scroll. |
| 318 webView->handleInputEvent( | 318 webView->handleInputEvent( |
| 319 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f)); | 319 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f)); |
| 320 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); | 320 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); |
| 321 EXPECT_POINT_EQ(IntPoint(0, 0), | 321 EXPECT_SIZE_EQ(ScrollOffset(0, 0), |
| 322 frame()->view()->getScrollableArea()->scrollPositionDouble()); | 322 frame()->view()->getScrollableArea()->scrollOffset()); |
| 323 | 323 |
| 324 // Top controls should consume 30px and become hidden. Excess scroll should be
consumed by the page at 2x scale. | 324 // Top controls should consume 30px and become hidden. Excess scroll should be
consumed by the page at 2x scale. |
| 325 webView->handleInputEvent( | 325 webView->handleInputEvent( |
| 326 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -70.f)); | 326 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -70.f)); |
| 327 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 327 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 328 EXPECT_POINT_EQ(IntPoint(0, 20), | 328 EXPECT_SIZE_EQ(ScrollOffset(0, 20), |
| 329 frame()->view()->getScrollableArea()->scrollPositionDouble()); | 329 frame()->view()->getScrollableArea()->scrollOffset()); |
| 330 | 330 |
| 331 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); | 331 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); |
| 332 | 332 |
| 333 // Change page scale and test. | 333 // Change page scale and test. |
| 334 webView->setPageScaleFactor(0.5); | 334 webView->setPageScaleFactor(0.5); |
| 335 | 335 |
| 336 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 336 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 337 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 337 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 338 EXPECT_POINT_EQ(IntPoint(0, 20), | 338 EXPECT_SIZE_EQ(ScrollOffset(0, 20), |
| 339 frame()->view()->getScrollableArea()->scrollPositionDouble()); | 339 frame()->view()->getScrollableArea()->scrollOffset()); |
| 340 | 340 |
| 341 webView->handleInputEvent( | 341 webView->handleInputEvent( |
| 342 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f)); | 342 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f)); |
| 343 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 343 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 344 EXPECT_POINT_EQ(IntPoint(0, 20), | 344 EXPECT_SIZE_EQ(ScrollOffset(0, 20), |
| 345 frame()->view()->getScrollableArea()->scrollPositionDouble()); | 345 frame()->view()->getScrollableArea()->scrollOffset()); |
| 346 | 346 |
| 347 // At 0.5x scale scrolling 10px should take us to the top of the page. | 347 // At 0.5x scale scrolling 10px should take us to the top of the page. |
| 348 webView->handleInputEvent( | 348 webView->handleInputEvent( |
| 349 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f)); | 349 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f)); |
| 350 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 350 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 351 EXPECT_POINT_EQ(IntPoint(0, 0), | 351 EXPECT_SIZE_EQ(ScrollOffset(0, 0), |
| 352 frame()->view()->getScrollableArea()->scrollPositionDouble()); | 352 frame()->view()->getScrollableArea()->scrollOffset()); |
| 353 } | 353 } |
| 354 | 354 |
| 355 // Some scroll deltas result in a shownRatio that can't be realized in a | 355 // Some scroll deltas result in a shownRatio that can't be realized in a |
| 356 // floating-point number. Make sure that if the top controls aren't fully | 356 // floating-point number. Make sure that if the top controls aren't fully |
| 357 // scrolled, scrollBy doesn't return any excess delta. i.e. There should be no | 357 // scrolled, scrollBy doesn't return any excess delta. i.e. There should be no |
| 358 // slippage between the content and top controls. | 358 // slippage between the content and top controls. |
| 359 TEST_F(TopControlsTest, MAYBE(FloatingPointSlippage)) { | 359 TEST_F(TopControlsTest, MAYBE(FloatingPointSlippage)) { |
| 360 WebViewImpl* webView = initialize(); | 360 WebViewImpl* webView = initialize(); |
| 361 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); | 361 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); |
| 362 webView->setPageScaleFactor(2.0); | 362 webView->setPageScaleFactor(2.0); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 373 // that scroll still consumes the whole delta. | 373 // that scroll still consumes the whole delta. |
| 374 FloatSize remainingDelta = webView->topControls().scrollBy(FloatSize(0, 10)); | 374 FloatSize remainingDelta = webView->topControls().scrollBy(FloatSize(0, 10)); |
| 375 EXPECT_EQ(0, remainingDelta.height()); | 375 EXPECT_EQ(0, remainingDelta.height()); |
| 376 } | 376 } |
| 377 | 377 |
| 378 // Scrollable subregions should scroll before top controls | 378 // Scrollable subregions should scroll before top controls |
| 379 TEST_F(TopControlsTest, MAYBE(ScrollableSubregionScrollFirst)) { | 379 TEST_F(TopControlsTest, MAYBE(ScrollableSubregionScrollFirst)) { |
| 380 WebViewImpl* webView = initialize("overflow-scrolling.html"); | 380 WebViewImpl* webView = initialize("overflow-scrolling.html"); |
| 381 webView->resizeWithTopControls(webView->size(), 50.f, true); | 381 webView->resizeWithTopControls(webView->size(), 50.f, true); |
| 382 webView->topControls().setShownRatio(1); | 382 webView->topControls().setShownRatio(1); |
| 383 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 50), | 383 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 50), |
| 384 ProgrammaticScroll); | 384 ProgrammaticScroll); |
| 385 | 385 |
| 386 // Test scroll down | 386 // Test scroll down |
| 387 // Scroll down should scroll the overflow div first but top controls and main
frame should not scroll. | 387 // Scroll down should scroll the overflow div first but top controls and main
frame should not scroll. |
| 388 verticalScroll(-800.f); | 388 verticalScroll(-800.f); |
| 389 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 389 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 390 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 390 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset()); |
| 391 | 391 |
| 392 // Continued scroll down should start hiding top controls but main frame shoul
d not scroll. | 392 // Continued scroll down should start hiding top controls but main frame shoul
d not scroll. |
| 393 verticalScroll(-40.f); | 393 verticalScroll(-40.f); |
| 394 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); | 394 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); |
| 395 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 395 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset()); |
| 396 | 396 |
| 397 // Continued scroll down should scroll down the main frame | 397 // Continued scroll down should scroll down the main frame |
| 398 verticalScroll(-40.f); | 398 verticalScroll(-40.f); |
| 399 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 399 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 400 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); | 400 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset()); |
| 401 | 401 |
| 402 // Test scroll up | 402 // Test scroll up |
| 403 // scroll up should scroll overflow div first | 403 // scroll up should scroll overflow div first |
| 404 verticalScroll(800.f); | 404 verticalScroll(800.f); |
| 405 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 405 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 406 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); | 406 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset()); |
| 407 | 407 |
| 408 // Continued scroll up should start showing top controls but main frame should
not scroll. | 408 // Continued scroll up should start showing top controls but main frame should
not scroll. |
| 409 verticalScroll(40.f); | 409 verticalScroll(40.f); |
| 410 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset()); | 410 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset()); |
| 411 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); | 411 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset()); |
| 412 | 412 |
| 413 // Continued scroll down up scroll up the main frame | 413 // Continued scroll down up scroll up the main frame |
| 414 verticalScroll(40.f); | 414 verticalScroll(40.f); |
| 415 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 415 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 416 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 416 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset()); |
| 417 } | 417 } |
| 418 | 418 |
| 419 // Scrollable iframes should scroll before top controls | 419 // Scrollable iframes should scroll before top controls |
| 420 TEST_F(TopControlsTest, MAYBE(ScrollableIframeScrollFirst)) { | 420 TEST_F(TopControlsTest, MAYBE(ScrollableIframeScrollFirst)) { |
| 421 WebViewImpl* webView = initialize("iframe-scrolling.html"); | 421 WebViewImpl* webView = initialize("iframe-scrolling.html"); |
| 422 webView->resizeWithTopControls(webView->size(), 50.f, true); | 422 webView->resizeWithTopControls(webView->size(), 50.f, true); |
| 423 webView->topControls().setShownRatio(1); | 423 webView->topControls().setShownRatio(1); |
| 424 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 50), | 424 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 50), |
| 425 ProgrammaticScroll); | 425 ProgrammaticScroll); |
| 426 | 426 |
| 427 // Test scroll down | 427 // Test scroll down |
| 428 // Scroll down should scroll the iframe first but top controls and main frame
should not scroll. | 428 // Scroll down should scroll the iframe first but top controls and main frame
should not scroll. |
| 429 verticalScroll(-800.f); | 429 verticalScroll(-800.f); |
| 430 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 430 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 431 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 431 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset()); |
| 432 | 432 |
| 433 // Continued scroll down should start hiding top controls but main frame shoul
d not scroll. | 433 // Continued scroll down should start hiding top controls but main frame shoul
d not scroll. |
| 434 verticalScroll(-40.f); | 434 verticalScroll(-40.f); |
| 435 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); | 435 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); |
| 436 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 436 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset()); |
| 437 | 437 |
| 438 // Continued scroll down should scroll down the main frame | 438 // Continued scroll down should scroll down the main frame |
| 439 verticalScroll(-40.f); | 439 verticalScroll(-40.f); |
| 440 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 440 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 441 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); | 441 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset()); |
| 442 | 442 |
| 443 // Test scroll up | 443 // Test scroll up |
| 444 // scroll up should scroll iframe first | 444 // scroll up should scroll iframe first |
| 445 verticalScroll(800.f); | 445 verticalScroll(800.f); |
| 446 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 446 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 447 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); | 447 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset()); |
| 448 | 448 |
| 449 // Continued scroll up should start showing top controls but main frame should
not scroll. | 449 // Continued scroll up should start showing top controls but main frame should
not scroll. |
| 450 verticalScroll(40.f); | 450 verticalScroll(40.f); |
| 451 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset()); | 451 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset()); |
| 452 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); | 452 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset()); |
| 453 | 453 |
| 454 // Continued scroll down up scroll up the main frame | 454 // Continued scroll down up scroll up the main frame |
| 455 verticalScroll(40.f); | 455 verticalScroll(40.f); |
| 456 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 456 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 457 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 457 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset()); |
| 458 } | 458 } |
| 459 | 459 |
| 460 // Top controls visibility should remain consistent when height is changed. | 460 // Top controls visibility should remain consistent when height is changed. |
| 461 TEST_F(TopControlsTest, MAYBE(HeightChangeMaintainsVisibility)) { | 461 TEST_F(TopControlsTest, MAYBE(HeightChangeMaintainsVisibility)) { |
| 462 WebViewImpl* webView = initialize(); | 462 WebViewImpl* webView = initialize(); |
| 463 webView->resizeWithTopControls(webView->size(), 20.f, false); | 463 webView->resizeWithTopControls(webView->size(), 20.f, false); |
| 464 webView->topControls().setShownRatio(0); | 464 webView->topControls().setShownRatio(0); |
| 465 | 465 |
| 466 webView->resizeWithTopControls(webView->size(), 20.f, false); | 466 webView->resizeWithTopControls(webView->size(), 20.f, false); |
| 467 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 467 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 468 | 468 |
| 469 webView->resizeWithTopControls(webView->size(), 40.f, false); | 469 webView->resizeWithTopControls(webView->size(), 40.f, false); |
| 470 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 470 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 471 | 471 |
| 472 // Scroll up to show top controls. | 472 // Scroll up to show top controls. |
| 473 verticalScroll(40.f); | 473 verticalScroll(40.f); |
| 474 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset()); | 474 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset()); |
| 475 | 475 |
| 476 // Changing height of a fully shown top controls should correctly adjust conte
nt offset | 476 // Changing height of a fully shown top controls should correctly adjust conte
nt offset |
| 477 webView->resizeWithTopControls(webView->size(), 30.f, false); | 477 webView->resizeWithTopControls(webView->size(), 30.f, false); |
| 478 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); | 478 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); |
| 479 } | 479 } |
| 480 | 480 |
| 481 // Zero delta should not have any effect on top controls. | 481 // Zero delta should not have any effect on top controls. |
| 482 TEST_F(TopControlsTest, MAYBE(ZeroHeightMeansNoEffect)) { | 482 TEST_F(TopControlsTest, MAYBE(ZeroHeightMeansNoEffect)) { |
| 483 WebViewImpl* webView = initialize(); | 483 WebViewImpl* webView = initialize(); |
| 484 webView->resizeWithTopControls(webView->size(), 0, false); | 484 webView->resizeWithTopControls(webView->size(), 0, false); |
| 485 webView->topControls().setShownRatio(0); | 485 webView->topControls().setShownRatio(0); |
| 486 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), | 486 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), |
| 487 ProgrammaticScroll); | 487 ProgrammaticScroll); |
| 488 | 488 |
| 489 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 489 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 490 | 490 |
| 491 verticalScroll(20.f); | 491 verticalScroll(20.f); |
| 492 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 492 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 493 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); | 493 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset()); |
| 494 | 494 |
| 495 verticalScroll(-30.f); | 495 verticalScroll(-30.f); |
| 496 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 496 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 497 EXPECT_POINT_EQ(IntPoint(0, 110), frame()->view()->scrollPosition()); | 497 EXPECT_SIZE_EQ(ScrollOffset(0, 110), frame()->view()->scrollOffset()); |
| 498 | 498 |
| 499 webView->topControls().setShownRatio(1); | 499 webView->topControls().setShownRatio(1); |
| 500 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 500 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
| 501 } | 501 } |
| 502 | 502 |
| 503 // Top controls should not hide when scrolling up past limit | 503 // Top controls should not hide when scrolling up past limit |
| 504 TEST_F(TopControlsTest, MAYBE(ScrollUpPastLimitDoesNotHide)) { | 504 TEST_F(TopControlsTest, MAYBE(ScrollUpPastLimitDoesNotHide)) { |
| 505 WebViewImpl* webView = initialize(); | 505 WebViewImpl* webView = initialize(); |
| 506 // Initialize top controls to be shown | 506 // Initialize top controls to be shown |
| 507 webView->resizeWithTopControls(webView->size(), 50.f, true); | 507 webView->resizeWithTopControls(webView->size(), 50.f, true); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 529 verticalScroll(-30.f); | 529 verticalScroll(-30.f); |
| 530 // Top controls should not move because neither frameview nor visual viewport | 530 // Top controls should not move because neither frameview nor visual viewport |
| 531 // are scrollable | 531 // are scrollable |
| 532 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 532 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 533 } | 533 } |
| 534 | 534 |
| 535 // Top controls should honor its constraints | 535 // Top controls should honor its constraints |
| 536 TEST_F(TopControlsTest, MAYBE(StateConstraints)) { | 536 TEST_F(TopControlsTest, MAYBE(StateConstraints)) { |
| 537 WebViewImpl* webView = initialize(); | 537 WebViewImpl* webView = initialize(); |
| 538 webView->resizeWithTopControls(webView->size(), 50.f, false); | 538 webView->resizeWithTopControls(webView->size(), 50.f, false); |
| 539 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), | 539 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), |
| 540 ProgrammaticScroll); | 540 ProgrammaticScroll); |
| 541 | 541 |
| 542 // Setting permitted state should change the content offset to match the | 542 // Setting permitted state should change the content offset to match the |
| 543 // constraint. | 543 // constraint. |
| 544 webView->updateTopControlsState(WebTopControlsShown, WebTopControlsShown, | 544 webView->updateTopControlsState(WebTopControlsShown, WebTopControlsShown, |
| 545 false); | 545 false); |
| 546 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 546 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
| 547 | 547 |
| 548 // Only shown state is permitted so controls cannot hide | 548 // Only shown state is permitted so controls cannot hide |
| 549 verticalScroll(-20.f); | 549 verticalScroll(-20.f); |
| 550 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset()); | 550 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset()); |
| 551 EXPECT_POINT_EQ(IntPoint(0, 120), frame()->view()->scrollPosition()); | 551 EXPECT_SIZE_EQ(ScrollOffset(0, 120), frame()->view()->scrollOffset()); |
| 552 | 552 |
| 553 // Setting permitted state should change content offset to match the | 553 // Setting permitted state should change content offset to match the |
| 554 // constraint. | 554 // constraint. |
| 555 webView->updateTopControlsState(WebTopControlsHidden, WebTopControlsHidden, | 555 webView->updateTopControlsState(WebTopControlsHidden, WebTopControlsHidden, |
| 556 false); | 556 false); |
| 557 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); | 557 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); |
| 558 | 558 |
| 559 // Only hidden state is permitted so controls cannot show | 559 // Only hidden state is permitted so controls cannot show |
| 560 verticalScroll(30.f); | 560 verticalScroll(30.f); |
| 561 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); | 561 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); |
| 562 EXPECT_POINT_EQ(IntPoint(0, 90), frame()->view()->scrollPosition()); | 562 EXPECT_SIZE_EQ(ScrollOffset(0, 90), frame()->view()->scrollOffset()); |
| 563 | 563 |
| 564 // Setting permitted state to "both" should not change content offset. | 564 // Setting permitted state to "both" should not change content offset. |
| 565 webView->updateTopControlsState(WebTopControlsBoth, WebTopControlsBoth, | 565 webView->updateTopControlsState(WebTopControlsBoth, WebTopControlsBoth, |
| 566 false); | 566 false); |
| 567 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); | 567 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); |
| 568 | 568 |
| 569 // Both states are permitted so controls can either show or hide | 569 // Both states are permitted so controls can either show or hide |
| 570 verticalScroll(50.f); | 570 verticalScroll(50.f); |
| 571 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset()); | 571 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset()); |
| 572 EXPECT_POINT_EQ(IntPoint(0, 90), frame()->view()->scrollPosition()); | 572 EXPECT_SIZE_EQ(ScrollOffset(0, 90), frame()->view()->scrollOffset()); |
| 573 | 573 |
| 574 verticalScroll(-50.f); | 574 verticalScroll(-50.f); |
| 575 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); | 575 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); |
| 576 EXPECT_POINT_EQ(IntPoint(0, 90), frame()->view()->scrollPosition()); | 576 EXPECT_SIZE_EQ(ScrollOffset(0, 90), frame()->view()->scrollOffset()); |
| 577 | 577 |
| 578 // Setting permitted state to "both" should not change an in-flight offset. | 578 // Setting permitted state to "both" should not change an in-flight offset. |
| 579 verticalScroll(20.f); | 579 verticalScroll(20.f); |
| 580 EXPECT_FLOAT_EQ(20, webView->topControls().contentOffset()); | 580 EXPECT_FLOAT_EQ(20, webView->topControls().contentOffset()); |
| 581 webView->updateTopControlsState(WebTopControlsBoth, WebTopControlsBoth, | 581 webView->updateTopControlsState(WebTopControlsBoth, WebTopControlsBoth, |
| 582 false); | 582 false); |
| 583 EXPECT_FLOAT_EQ(20, webView->topControls().contentOffset()); | 583 EXPECT_FLOAT_EQ(20, webView->topControls().contentOffset()); |
| 584 | 584 |
| 585 // An animated state change shouldn't cause a change to the content offset | 585 // An animated state change shouldn't cause a change to the content offset |
| 586 // since it'll be driven from the compositor. | 586 // since it'll be driven from the compositor. |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 794 webView->setPageScaleFactor(pageScale); | 794 webView->setPageScaleFactor(pageScale); |
| 795 { | 795 { |
| 796 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 796 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 797 webView->handleInputEvent( | 797 webView->handleInputEvent( |
| 798 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -10000)); | 798 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -10000)); |
| 799 | 799 |
| 800 ASSERT_EQ(0.f, webView->topControls().contentOffset()); | 800 ASSERT_EQ(0.f, webView->topControls().contentOffset()); |
| 801 | 801 |
| 802 EXPECT_EQ(expectedVisualOffset, visualViewport().location().y()); | 802 EXPECT_EQ(expectedVisualOffset, visualViewport().location().y()); |
| 803 EXPECT_EQ(expectedLayoutOffset, | 803 EXPECT_EQ(expectedLayoutOffset, |
| 804 view->layoutViewportScrollableArea()->scrollPosition().y()); | 804 view->layoutViewportScrollableArea()->scrollOffset().height()); |
| 805 EXPECT_EQ(expectedRootOffset, rootViewport->scrollPosition().y()); | 805 EXPECT_EQ(expectedRootOffset, rootViewport->scrollOffset().height()); |
| 806 | 806 |
| 807 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); | 807 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); |
| 808 } | 808 } |
| 809 | 809 |
| 810 // Commit the top controls resize so that the top controls do not shrink the | 810 // Commit the top controls resize so that the top controls do not shrink the |
| 811 // layout size. This should not have moved any of the viewports. | 811 // layout size. This should not have moved any of the viewports. |
| 812 webView->resizeWithTopControls( | 812 webView->resizeWithTopControls( |
| 813 WebSize(800, layoutViewportHeight + topControlsHeight), topControlsHeight, | 813 WebSize(800, layoutViewportHeight + topControlsHeight), topControlsHeight, |
| 814 false); | 814 false); |
| 815 webView->updateAllLifecyclePhases(); | 815 webView->updateAllLifecyclePhases(); |
| 816 ASSERT_EQ(expectedVisualOffset, visualViewport().location().y()); | 816 ASSERT_EQ(expectedVisualOffset, visualViewport().location().y()); |
| 817 ASSERT_EQ(expectedLayoutOffset, | 817 ASSERT_EQ(expectedLayoutOffset, |
| 818 view->layoutViewportScrollableArea()->scrollPosition().y()); | 818 view->layoutViewportScrollableArea()->scrollOffset().height()); |
| 819 ASSERT_EQ(expectedRootOffset, rootViewport->scrollPosition().y()); | 819 ASSERT_EQ(expectedRootOffset, rootViewport->scrollOffset().height()); |
| 820 | 820 |
| 821 // Now scroll back up just enough to show the top controls. The top controls | 821 // Now scroll back up just enough to show the top controls. The top controls |
| 822 // should shrink both viewports but the layout viewport by a greater amount. | 822 // should shrink both viewports but the layout viewport by a greater amount. |
| 823 // This means the visual viewport's offset must be clamped to keep it within | 823 // This means the visual viewport's offset must be clamped to keep it within |
| 824 // the layout viewport. Make sure we adjust the scroll position to account | 824 // the layout viewport. Make sure we adjust the scroll position to account |
| 825 // for this and keep the visual viewport at the same location relative to | 825 // for this and keep the visual viewport at the same location relative to |
| 826 // the document (i.e. the user shouldn't see a movement). | 826 // the document (i.e. the user shouldn't see a movement). |
| 827 { | 827 { |
| 828 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 828 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 829 webView->handleInputEvent( | 829 webView->handleInputEvent( |
| 830 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 80)); | 830 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 80)); |
| 831 | 831 |
| 832 visualViewport().clampToBoundaries(); | 832 visualViewport().clampToBoundaries(); |
| 833 view->setScrollPosition(view->scrollPosition(), ProgrammaticScroll); | 833 view->setScrollOffset(view->scrollOffset(), ProgrammaticScroll); |
| 834 | 834 |
| 835 ASSERT_EQ(80.f, webView->topControls().contentOffset()); | 835 ASSERT_EQ(80.f, webView->topControls().contentOffset()); |
| 836 EXPECT_EQ(expectedRootOffset, rootViewport->scrollPosition().y()); | 836 EXPECT_EQ(expectedRootOffset, rootViewport->scrollOffset().height()); |
| 837 | 837 |
| 838 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); | 838 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); |
| 839 } | 839 } |
| 840 } | 840 } |
| 841 | 841 |
| 842 } // namespace blink | 842 } // namespace blink |
| OLD | NEW |