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 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 } | 199 } |
200 | 200 |
201 // Scrolling up after previous scroll downs should cause top controls to be | 201 // Scrolling up after previous scroll downs should cause top controls to be |
202 // shown only after all previously scrolled down amount is compensated. | 202 // shown only after all previously scrolled down amount is compensated. |
203 TEST_F(TopControlsTest, MAYBE(ScrollDownThenUp)) | 203 TEST_F(TopControlsTest, MAYBE(ScrollDownThenUp)) |
204 { | 204 { |
205 WebViewImpl* webView = initialize(); | 205 WebViewImpl* webView = initialize(); |
206 // initialize top controls to be shown and position page at 100px. | 206 // initialize top controls to be shown and position page at 100px. |
207 webView->setTopControlsHeight(50.f, true); | 207 webView->setTopControlsHeight(50.f, true); |
208 webView->topControls().setShownRatio(1); | 208 webView->topControls().setShownRatio(1); |
209 frame()->view()->scrollableArea()->setScrollPosition(IntPoint(0, 100), Progr
ammaticScroll); | 209 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), Pr
ogrammaticScroll); |
210 | 210 |
211 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 211 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
212 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 212 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
213 | 213 |
214 // Scroll down to completely hide top controls. Excess deltaY (100px) should
be consumed by the page. | 214 // Scroll down to completely hide top controls. Excess deltaY (100px) should
be consumed by the page. |
215 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, -150.f)); | 215 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, -150.f)); |
216 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 216 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
217 EXPECT_POINT_EQ(IntPoint(0, 200), frame()->view()->scrollPosition()); | 217 EXPECT_POINT_EQ(IntPoint(0, 200), frame()->view()->scrollPosition()); |
218 | 218 |
219 // Scroll up and ensure the top controls does not move until we recover 100p
x previously scrolled. | 219 // Scroll up and ensure the top controls does not move until we recover 100p
x previously scrolled. |
(...skipping 17 matching lines...) Expand all Loading... |
237 } | 237 } |
238 | 238 |
239 // Scrolling down should always cause visible top controls to start hiding even | 239 // Scrolling down should always cause visible top controls to start hiding even |
240 // if we have been scrolling up previously. | 240 // if we have been scrolling up previously. |
241 TEST_F(TopControlsTest, MAYBE(ScrollUpThenDown)) | 241 TEST_F(TopControlsTest, MAYBE(ScrollUpThenDown)) |
242 { | 242 { |
243 WebViewImpl* webView = initialize(); | 243 WebViewImpl* webView = initialize(); |
244 // initialize top controls to be hidden and position page at 100px. | 244 // initialize top controls to be hidden and position page at 100px. |
245 webView->setTopControlsHeight(50.f, false); | 245 webView->setTopControlsHeight(50.f, false); |
246 webView->topControls().setShownRatio(0); | 246 webView->topControls().setShownRatio(0); |
247 frame()->view()->scrollableArea()->setScrollPosition(IntPoint(0, 100), Progr
ammaticScroll); | 247 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), Pr
ogrammaticScroll); |
248 | 248 |
249 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 249 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
250 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 250 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
251 | 251 |
252 // Scroll up to completely show top controls. Excess deltaY (50px) should be
consumed by the page. | 252 // Scroll up to completely show top controls. Excess deltaY (50px) should be
consumed by the page. |
253 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, 100.f)); | 253 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, 100.f)); |
254 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 254 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
255 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 255 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); |
256 | 256 |
257 // Scroll down and ensure only top controls is scrolled | 257 // Scroll down and ensure only top controls is scrolled |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 // Initialize top controls to be shown. | 295 // Initialize top controls to be shown. |
296 webView->setTopControlsHeight(50.f, true); | 296 webView->setTopControlsHeight(50.f, true); |
297 webView->topControls().setShownRatio(1); | 297 webView->topControls().setShownRatio(1); |
298 | 298 |
299 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 299 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
300 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 300 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
301 | 301 |
302 // Top controls should be scrolled partially and page should not scroll. | 302 // Top controls should be scrolled partially and page should not scroll. |
303 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, -20.f)); | 303 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, -20.f)); |
304 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); | 304 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); |
305 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->scrollableArea()->scrollPos
itionDouble()); | 305 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->getScrollableArea()->scroll
PositionDouble()); |
306 | 306 |
307 // Top controls should consume 30px and become hidden. Excess scroll should
be consumed by the page at 2x scale. | 307 // Top controls should consume 30px and become hidden. Excess scroll should
be consumed by the page at 2x scale. |
308 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, -70.f)); | 308 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, -70.f)); |
309 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 309 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
310 EXPECT_POINT_EQ(IntPoint(0, 20), frame()->view()->scrollableArea()->scrollPo
sitionDouble()); | 310 EXPECT_POINT_EQ(IntPoint(0, 20), frame()->view()->getScrollableArea()->scrol
lPositionDouble()); |
311 | 311 |
312 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); | 312 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); |
313 | 313 |
314 // Change page scale and test. | 314 // Change page scale and test. |
315 webView->setPageScaleFactor(0.5); | 315 webView->setPageScaleFactor(0.5); |
316 | 316 |
317 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 317 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
318 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 318 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
319 EXPECT_POINT_EQ(IntPoint(0, 20), frame()->view()->scrollableArea()->scrollPo
sitionDouble()); | 319 EXPECT_POINT_EQ(IntPoint(0, 20), frame()->view()->getScrollableArea()->scrol
lPositionDouble()); |
320 | 320 |
321 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, 50.f)); | 321 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, 50.f)); |
322 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 322 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
323 EXPECT_POINT_EQ(IntPoint(0, 20), frame()->view()->scrollableArea()->scrollPo
sitionDouble()); | 323 EXPECT_POINT_EQ(IntPoint(0, 20), frame()->view()->getScrollableArea()->scrol
lPositionDouble()); |
324 | 324 |
325 // At 0.5x scale scrolling 10px should take us to the top of the page. | 325 // At 0.5x scale scrolling 10px should take us to the top of the page. |
326 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, 10.f)); | 326 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollUpdate,
0, 10.f)); |
327 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 327 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
328 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->scrollableArea()->scrollPos
itionDouble()); | 328 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->getScrollableArea()->scroll
PositionDouble()); |
329 } | 329 } |
330 | 330 |
331 // Some scroll deltas result in a shownRatio that can't be realized in a | 331 // Some scroll deltas result in a shownRatio that can't be realized in a |
332 // floating-point number. Make sure that if the top controls aren't fully | 332 // floating-point number. Make sure that if the top controls aren't fully |
333 // scrolled, scrollBy doesn't return any excess delta. i.e. There should be no | 333 // scrolled, scrollBy doesn't return any excess delta. i.e. There should be no |
334 // slippage between the content and top controls. | 334 // slippage between the content and top controls. |
335 TEST_F(TopControlsTest, MAYBE(FloatingPointSlippage)) | 335 TEST_F(TopControlsTest, MAYBE(FloatingPointSlippage)) |
336 { | 336 { |
337 WebViewImpl* webView = initialize(); | 337 WebViewImpl* webView = initialize(); |
338 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); | 338 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); |
(...skipping 12 matching lines...) Expand all Loading... |
351 FloatSize remainingDelta = webView->topControls().scrollBy(FloatSize(0, 10))
; | 351 FloatSize remainingDelta = webView->topControls().scrollBy(FloatSize(0, 10))
; |
352 EXPECT_EQ(0, remainingDelta.height()); | 352 EXPECT_EQ(0, remainingDelta.height()); |
353 } | 353 } |
354 | 354 |
355 // Scrollable subregions should scroll before top controls | 355 // Scrollable subregions should scroll before top controls |
356 TEST_F(TopControlsTest, MAYBE(ScrollableSubregionScrollFirst)) | 356 TEST_F(TopControlsTest, MAYBE(ScrollableSubregionScrollFirst)) |
357 { | 357 { |
358 WebViewImpl* webView = initialize("overflow-scrolling.html"); | 358 WebViewImpl* webView = initialize("overflow-scrolling.html"); |
359 webView->setTopControlsHeight(50.f, true); | 359 webView->setTopControlsHeight(50.f, true); |
360 webView->topControls().setShownRatio(1); | 360 webView->topControls().setShownRatio(1); |
361 frame()->view()->scrollableArea()->setScrollPosition(IntPoint(0, 50), Progra
mmaticScroll); | 361 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 50), Pro
grammaticScroll); |
362 | 362 |
363 // Test scroll down | 363 // Test scroll down |
364 // Scroll down should scroll the overflow div first but top controls and mai
n frame should not scroll. | 364 // Scroll down should scroll the overflow div first but top controls and mai
n frame should not scroll. |
365 verticalScroll(-800.f); | 365 verticalScroll(-800.f); |
366 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 366 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
367 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 367 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); |
368 | 368 |
369 // Continued scroll down should start hiding top controls but main frame sho
uld not scroll. | 369 // Continued scroll down should start hiding top controls but main frame sho
uld not scroll. |
370 verticalScroll(-40.f); | 370 verticalScroll(-40.f); |
371 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); | 371 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); |
(...skipping 21 matching lines...) Expand all Loading... |
393 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 393 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); |
394 } | 394 } |
395 | 395 |
396 | 396 |
397 // Scrollable iframes should scroll before top controls | 397 // Scrollable iframes should scroll before top controls |
398 TEST_F(TopControlsTest, MAYBE(ScrollableIframeScrollFirst)) | 398 TEST_F(TopControlsTest, MAYBE(ScrollableIframeScrollFirst)) |
399 { | 399 { |
400 WebViewImpl* webView = initialize("iframe-scrolling.html"); | 400 WebViewImpl* webView = initialize("iframe-scrolling.html"); |
401 webView->setTopControlsHeight(50.f, true); | 401 webView->setTopControlsHeight(50.f, true); |
402 webView->topControls().setShownRatio(1); | 402 webView->topControls().setShownRatio(1); |
403 frame()->view()->scrollableArea()->setScrollPosition(IntPoint(0, 50), Progra
mmaticScroll); | 403 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 50), Pro
grammaticScroll); |
404 | 404 |
405 // Test scroll down | 405 // Test scroll down |
406 // Scroll down should scroll the iframe first but top controls and main fram
e should not scroll. | 406 // Scroll down should scroll the iframe first but top controls and main fram
e should not scroll. |
407 verticalScroll(-800.f); | 407 verticalScroll(-800.f); |
408 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 408 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
409 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); | 409 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); |
410 | 410 |
411 // Continued scroll down should start hiding top controls but main frame sho
uld not scroll. | 411 // Continued scroll down should start hiding top controls but main frame sho
uld not scroll. |
412 verticalScroll(-40.f); | 412 verticalScroll(-40.f); |
413 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); | 413 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
456 webView->setTopControlsHeight(30.f, false); | 456 webView->setTopControlsHeight(30.f, false); |
457 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); | 457 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); |
458 } | 458 } |
459 | 459 |
460 // Zero delta should not have any effect on top controls. | 460 // Zero delta should not have any effect on top controls. |
461 TEST_F(TopControlsTest, MAYBE(ZeroHeightMeansNoEffect)) | 461 TEST_F(TopControlsTest, MAYBE(ZeroHeightMeansNoEffect)) |
462 { | 462 { |
463 WebViewImpl* webView = initialize(); | 463 WebViewImpl* webView = initialize(); |
464 webView->setTopControlsHeight(0, false); | 464 webView->setTopControlsHeight(0, false); |
465 webView->topControls().setShownRatio(0); | 465 webView->topControls().setShownRatio(0); |
466 frame()->view()->scrollableArea()->setScrollPosition(IntPoint(0, 100), Progr
ammaticScroll); | 466 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), Pr
ogrammaticScroll); |
467 | 467 |
468 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 468 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
469 | 469 |
470 verticalScroll(20.f); | 470 verticalScroll(20.f); |
471 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 471 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
472 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); | 472 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); |
473 | 473 |
474 verticalScroll(-30.f); | 474 verticalScroll(-30.f); |
475 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 475 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
476 EXPECT_POINT_EQ(IntPoint(0, 110), frame()->view()->scrollPosition()); | 476 EXPECT_POINT_EQ(IntPoint(0, 110), frame()->view()->scrollPosition()); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 // Top controls should not move because neither frameview nor visual viewpor
t | 510 // Top controls should not move because neither frameview nor visual viewpor
t |
511 // are scrollable | 511 // are scrollable |
512 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); | 512 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); |
513 } | 513 } |
514 | 514 |
515 // Top controls should honor its constraints | 515 // Top controls should honor its constraints |
516 TEST_F(TopControlsTest, MAYBE(StateConstraints)) | 516 TEST_F(TopControlsTest, MAYBE(StateConstraints)) |
517 { | 517 { |
518 WebViewImpl* webView = initialize(); | 518 WebViewImpl* webView = initialize(); |
519 webView->setTopControlsHeight(50.f, false); | 519 webView->setTopControlsHeight(50.f, false); |
520 frame()->view()->scrollableArea()->setScrollPosition(IntPoint(0, 100), Progr
ammaticScroll); | 520 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), Pr
ogrammaticScroll); |
521 | 521 |
522 // Setting permitted state should not change content offset | 522 // Setting permitted state should not change content offset |
523 webView->updateTopControlsState(WebTopControlsShown, WebTopControlsShown, fa
lse); | 523 webView->updateTopControlsState(WebTopControlsShown, WebTopControlsShown, fa
lse); |
524 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); | 524 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); |
525 | 525 |
526 // Showing is permitted | 526 // Showing is permitted |
527 webView->topControls().setShownRatio(1); | 527 webView->topControls().setShownRatio(1); |
528 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset()); | 528 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset()); |
529 | 529 |
530 // Only shown state is permitted so controls cannot hide | 530 // Only shown state is permitted so controls cannot hide |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
725 // that's 1600px wide so the minimum scale is 0.25 to encompass that. | 725 // that's 1600px wide so the minimum scale is 0.25 to encompass that. |
726 ASSERT_EQ(0.25f, webView->minimumPageScaleFactor()); | 726 ASSERT_EQ(0.25f, webView->minimumPageScaleFactor()); |
727 | 727 |
728 // The viewport will match the layout width at scale=0.5 so the height used | 728 // The viewport will match the layout width at scale=0.5 so the height used |
729 // for vh should be (300 / 0.5) for the layout height + (100 / 0.5) for top | 729 // for vh should be (300 / 0.5) for the layout height + (100 / 0.5) for top |
730 // controls = 800. | 730 // controls = 800. |
731 EXPECT_EQ(800, frame()->view()->viewportSizeForViewportUnits().height()); | 731 EXPECT_EQ(800, frame()->view()->viewportSizeForViewportUnits().height()); |
732 } | 732 } |
733 | 733 |
734 } // namespace blink | 734 } // namespace blink |
OLD | NEW |