| 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 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 webView->resizeWithBrowserControls(webView->size(), 50.f, true); | 162 webView->resizeWithBrowserControls(webView->size(), 50.f, true); |
| 163 webView->browserControls().setShownRatio(1); | 163 webView->browserControls().setShownRatio(1); |
| 164 | 164 |
| 165 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 165 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 166 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 166 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 167 | 167 |
| 168 // Browser controls should be scrolled partially and page should not scroll. | 168 // Browser 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->browserControls().contentOffset()); | 171 EXPECT_FLOAT_EQ(25.f, webView->browserControls().contentOffset()); |
| 172 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frame()->view()->getScrollOffset()); | 172 EXPECT_SIZE_EQ( |
| 173 ScrollOffset(0, 0), |
| 174 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 173 | 175 |
| 174 // Browser controls should consume 25px and become hidden. Excess scroll | 176 // Browser controls should consume 25px and become hidden. Excess scroll |
| 175 // should be | 177 // should be |
| 176 // consumed by the page. | 178 // consumed by the page. |
| 177 webView->handleInputEvent( | 179 webView->handleInputEvent( |
| 178 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); | 180 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); |
| 179 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 181 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 180 EXPECT_SIZE_EQ(ScrollOffset(0, 15), frame()->view()->getScrollOffset()); | 182 EXPECT_SIZE_EQ( |
| 183 ScrollOffset(0, 15), |
| 184 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 181 | 185 |
| 182 // Only page should consume scroll | 186 // Only page should consume scroll |
| 183 webView->handleInputEvent( | 187 webView->handleInputEvent( |
| 184 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f)); | 188 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f)); |
| 185 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 189 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 186 EXPECT_SIZE_EQ(ScrollOffset(0, 35), frame()->view()->getScrollOffset()); | 190 EXPECT_SIZE_EQ( |
| 191 ScrollOffset(0, 35), |
| 192 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 187 } | 193 } |
| 188 | 194 |
| 189 // Scrolling up should show browser controls. | 195 // Scrolling up should show browser controls. |
| 190 TEST_F(BrowserControlsTest, MAYBE(ShowOnScrollUp)) { | 196 TEST_F(BrowserControlsTest, MAYBE(ShowOnScrollUp)) { |
| 191 WebViewImpl* webView = initialize(); | 197 WebViewImpl* webView = initialize(); |
| 192 // initialize browser controls to be hidden. | 198 // initialize browser controls to be hidden. |
| 193 webView->resizeWithBrowserControls(webView->size(), 50.f, false); | 199 webView->resizeWithBrowserControls(webView->size(), 50.f, false); |
| 194 webView->browserControls().setShownRatio(0); | 200 webView->browserControls().setShownRatio(0); |
| 195 | 201 |
| 196 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 202 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 197 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 203 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 198 | 204 |
| 199 webView->handleInputEvent( | 205 webView->handleInputEvent( |
| 200 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f)); | 206 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f)); |
| 201 EXPECT_FLOAT_EQ(10.f, webView->browserControls().contentOffset()); | 207 EXPECT_FLOAT_EQ(10.f, webView->browserControls().contentOffset()); |
| 202 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frame()->view()->getScrollOffset()); | 208 EXPECT_SIZE_EQ( |
| 209 ScrollOffset(0, 0), |
| 210 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 203 | 211 |
| 204 webView->handleInputEvent( | 212 webView->handleInputEvent( |
| 205 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f)); | 213 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f)); |
| 206 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 214 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 207 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frame()->view()->getScrollOffset()); | 215 EXPECT_SIZE_EQ( |
| 216 ScrollOffset(0, 0), |
| 217 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 208 } | 218 } |
| 209 | 219 |
| 210 // Scrolling up after previous scroll downs should cause browser controls to be | 220 // Scrolling up after previous scroll downs should cause browser controls to be |
| 211 // shown only after all previously scrolled down amount is compensated. | 221 // shown only after all previously scrolled down amount is compensated. |
| 212 TEST_F(BrowserControlsTest, MAYBE(ScrollDownThenUp)) { | 222 TEST_F(BrowserControlsTest, MAYBE(ScrollDownThenUp)) { |
| 213 WebViewImpl* webView = initialize(); | 223 WebViewImpl* webView = initialize(); |
| 214 // initialize browser controls to be shown and position page at 100px. | 224 // initialize browser controls to be shown and position page at 100px. |
| 215 webView->resizeWithBrowserControls(webView->size(), 50.f, true); | 225 webView->resizeWithBrowserControls(webView->size(), 50.f, true); |
| 216 webView->browserControls().setShownRatio(1); | 226 webView->browserControls().setShownRatio(1); |
| 217 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), | 227 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), |
| 218 ProgrammaticScroll); | 228 ProgrammaticScroll); |
| 219 | 229 |
| 220 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 230 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 221 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 231 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 222 | 232 |
| 223 // Scroll down to completely hide browser controls. Excess deltaY (100px) | 233 // Scroll down to completely hide browser controls. Excess deltaY (100px) |
| 224 // should be consumed by the page. | 234 // should be consumed by the page. |
| 225 webView->handleInputEvent( | 235 webView->handleInputEvent( |
| 226 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -150.f)); | 236 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -150.f)); |
| 227 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 237 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 228 EXPECT_SIZE_EQ(ScrollOffset(0, 200), frame()->view()->getScrollOffset()); | 238 EXPECT_SIZE_EQ( |
| 239 ScrollOffset(0, 200), |
| 240 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 229 | 241 |
| 230 // Scroll up and ensure the browser controls does not move until we recover | 242 // Scroll up and ensure the browser controls does not move until we recover |
| 231 // 100px previously scrolled. | 243 // 100px previously scrolled. |
| 232 webView->handleInputEvent( | 244 webView->handleInputEvent( |
| 233 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 40.f)); | 245 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 40.f)); |
| 234 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 246 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 235 EXPECT_SIZE_EQ(ScrollOffset(0, 160), frame()->view()->getScrollOffset()); | 247 EXPECT_SIZE_EQ( |
| 248 ScrollOffset(0, 160), |
| 249 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 236 | 250 |
| 237 webView->handleInputEvent( | 251 webView->handleInputEvent( |
| 238 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 60.f)); | 252 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 60.f)); |
| 239 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 253 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 240 EXPECT_SIZE_EQ(ScrollOffset(0, 100), frame()->view()->getScrollOffset()); | 254 EXPECT_SIZE_EQ( |
| 255 ScrollOffset(0, 100), |
| 256 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 241 | 257 |
| 242 // Now we have hit the threshold so further scroll up should be consumed by | 258 // Now we have hit the threshold so further scroll up should be consumed by |
| 243 // browser controls. | 259 // browser controls. |
| 244 webView->handleInputEvent( | 260 webView->handleInputEvent( |
| 245 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 30.f)); | 261 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 30.f)); |
| 246 EXPECT_FLOAT_EQ(30.f, webView->browserControls().contentOffset()); | 262 EXPECT_FLOAT_EQ(30.f, webView->browserControls().contentOffset()); |
| 247 EXPECT_SIZE_EQ(ScrollOffset(0, 100), frame()->view()->getScrollOffset()); | 263 EXPECT_SIZE_EQ( |
| 264 ScrollOffset(0, 100), |
| 265 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 248 | 266 |
| 249 // Once top control is fully shown then page should consume any excess scroll. | 267 // Once top control is fully shown then page should consume any excess scroll. |
| 250 webView->handleInputEvent( | 268 webView->handleInputEvent( |
| 251 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 70.f)); | 269 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 70.f)); |
| 252 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 270 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 253 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->getScrollOffset()); | 271 EXPECT_SIZE_EQ( |
| 272 ScrollOffset(0, 50), |
| 273 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 254 } | 274 } |
| 255 | 275 |
| 256 // Scrolling down should always cause visible browser controls to start hiding | 276 // Scrolling down should always cause visible browser controls to start hiding |
| 257 // even if we have been scrolling up previously. | 277 // even if we have been scrolling up previously. |
| 258 TEST_F(BrowserControlsTest, MAYBE(ScrollUpThenDown)) { | 278 TEST_F(BrowserControlsTest, MAYBE(ScrollUpThenDown)) { |
| 259 WebViewImpl* webView = initialize(); | 279 WebViewImpl* webView = initialize(); |
| 260 // initialize browser controls to be hidden and position page at 100px. | 280 // initialize browser controls to be hidden and position page at 100px. |
| 261 webView->resizeWithBrowserControls(webView->size(), 50.f, false); | 281 webView->resizeWithBrowserControls(webView->size(), 50.f, false); |
| 262 webView->browserControls().setShownRatio(0); | 282 webView->browserControls().setShownRatio(0); |
| 263 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), | 283 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), |
| 264 ProgrammaticScroll); | 284 ProgrammaticScroll); |
| 265 | 285 |
| 266 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 286 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 267 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 287 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 268 | 288 |
| 269 // Scroll up to completely show browser controls. Excess deltaY (50px) should | 289 // Scroll up to completely show browser controls. Excess deltaY (50px) should |
| 270 // be consumed by the page. | 290 // be consumed by the page. |
| 271 webView->handleInputEvent( | 291 webView->handleInputEvent( |
| 272 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 100.f)); | 292 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 100.f)); |
| 273 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 293 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 274 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->getScrollOffset()); | 294 EXPECT_SIZE_EQ( |
| 295 ScrollOffset(0, 50), |
| 296 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 275 | 297 |
| 276 // Scroll down and ensure only browser controls is scrolled | 298 // Scroll down and ensure only browser controls is scrolled |
| 277 webView->handleInputEvent( | 299 webView->handleInputEvent( |
| 278 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); | 300 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); |
| 279 EXPECT_FLOAT_EQ(10.f, webView->browserControls().contentOffset()); | 301 EXPECT_FLOAT_EQ(10.f, webView->browserControls().contentOffset()); |
| 280 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->getScrollOffset()); | 302 EXPECT_SIZE_EQ( |
| 303 ScrollOffset(0, 50), |
| 304 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 281 | 305 |
| 282 webView->handleInputEvent( | 306 webView->handleInputEvent( |
| 283 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -60.f)); | 307 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -60.f)); |
| 284 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 308 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 285 EXPECT_SIZE_EQ(ScrollOffset(0, 100), frame()->view()->getScrollOffset()); | 309 EXPECT_SIZE_EQ( |
| 310 ScrollOffset(0, 100), |
| 311 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 286 } | 312 } |
| 287 | 313 |
| 288 // Browser controls should not consume horizontal scroll. | 314 // Browser controls should not consume horizontal scroll. |
| 289 TEST_F(BrowserControlsTest, MAYBE(HorizontalScroll)) { | 315 TEST_F(BrowserControlsTest, MAYBE(HorizontalScroll)) { |
| 290 WebViewImpl* webView = initialize(); | 316 WebViewImpl* webView = initialize(); |
| 291 // initialize browser controls to be shown. | 317 // initialize browser controls to be shown. |
| 292 webView->resizeWithBrowserControls(webView->size(), 50.f, true); | 318 webView->resizeWithBrowserControls(webView->size(), 50.f, true); |
| 293 webView->browserControls().setShownRatio(1); | 319 webView->browserControls().setShownRatio(1); |
| 294 | 320 |
| 295 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); | 321 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); |
| 296 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 322 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 297 | 323 |
| 298 // Browser controls should not consume horizontal scroll. | 324 // Browser controls should not consume horizontal scroll. |
| 299 webView->handleInputEvent( | 325 webView->handleInputEvent( |
| 300 generateEvent(WebInputEvent::GestureScrollUpdate, -110.f, -100.f)); | 326 generateEvent(WebInputEvent::GestureScrollUpdate, -110.f, -100.f)); |
| 301 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 327 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 302 EXPECT_SIZE_EQ(ScrollOffset(110, 50), frame()->view()->getScrollOffset()); | 328 EXPECT_SIZE_EQ( |
| 329 ScrollOffset(110, 50), |
| 330 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 303 | 331 |
| 304 webView->handleInputEvent( | 332 webView->handleInputEvent( |
| 305 generateEvent(WebInputEvent::GestureScrollUpdate, -40.f, 0)); | 333 generateEvent(WebInputEvent::GestureScrollUpdate, -40.f, 0)); |
| 306 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 334 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 307 EXPECT_SIZE_EQ(ScrollOffset(150, 50), frame()->view()->getScrollOffset()); | 335 EXPECT_SIZE_EQ( |
| 336 ScrollOffset(150, 50), |
| 337 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 308 } | 338 } |
| 309 | 339 |
| 310 // Page scale should not impact browser controls scrolling | 340 // Page scale should not impact browser controls scrolling |
| 311 TEST_F(BrowserControlsTest, MAYBE(PageScaleHasNoImpact)) { | 341 TEST_F(BrowserControlsTest, MAYBE(PageScaleHasNoImpact)) { |
| 312 WebViewImpl* webView = initialize(); | 342 WebViewImpl* webView = initialize(); |
| 313 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); | 343 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); |
| 314 webView->setPageScaleFactor(2.0); | 344 webView->setPageScaleFactor(2.0); |
| 315 | 345 |
| 316 // Initialize browser controls to be shown. | 346 // Initialize browser controls to be shown. |
| 317 webView->resizeWithBrowserControls(webView->size(), 50.f, true); | 347 webView->resizeWithBrowserControls(webView->size(), 50.f, true); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 webView->resizeWithBrowserControls(webView->size(), 50.f, true); | 419 webView->resizeWithBrowserControls(webView->size(), 50.f, true); |
| 390 webView->browserControls().setShownRatio(1); | 420 webView->browserControls().setShownRatio(1); |
| 391 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 50), | 421 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 50), |
| 392 ProgrammaticScroll); | 422 ProgrammaticScroll); |
| 393 | 423 |
| 394 // Test scroll down | 424 // Test scroll down |
| 395 // Scroll down should scroll the overflow div first but browser controls and | 425 // Scroll down should scroll the overflow div first but browser controls and |
| 396 // main frame should not scroll. | 426 // main frame should not scroll. |
| 397 verticalScroll(-800.f); | 427 verticalScroll(-800.f); |
| 398 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 428 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 399 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->getScrollOffset()); | 429 EXPECT_SIZE_EQ( |
| 430 ScrollOffset(0, 50), |
| 431 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 400 | 432 |
| 401 // Continued scroll down should start hiding browser controls but main frame | 433 // Continued scroll down should start hiding browser controls but main frame |
| 402 // should not scroll. | 434 // should not scroll. |
| 403 verticalScroll(-40.f); | 435 verticalScroll(-40.f); |
| 404 EXPECT_FLOAT_EQ(10.f, webView->browserControls().contentOffset()); | 436 EXPECT_FLOAT_EQ(10.f, webView->browserControls().contentOffset()); |
| 405 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->getScrollOffset()); | 437 EXPECT_SIZE_EQ( |
| 438 ScrollOffset(0, 50), |
| 439 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 406 | 440 |
| 407 // Continued scroll down should scroll down the main frame | 441 // Continued scroll down should scroll down the main frame |
| 408 verticalScroll(-40.f); | 442 verticalScroll(-40.f); |
| 409 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 443 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 410 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->getScrollOffset()); | 444 EXPECT_SIZE_EQ( |
| 445 ScrollOffset(0, 80), |
| 446 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 411 | 447 |
| 412 // Test scroll up | 448 // Test scroll up |
| 413 // scroll up should scroll overflow div first | 449 // scroll up should scroll overflow div first |
| 414 verticalScroll(800.f); | 450 verticalScroll(800.f); |
| 415 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 451 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 416 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->getScrollOffset()); | 452 EXPECT_SIZE_EQ( |
| 453 ScrollOffset(0, 80), |
| 454 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 417 | 455 |
| 418 // Continued scroll up should start showing browser controls but main frame | 456 // Continued scroll up should start showing browser controls but main frame |
| 419 // should not scroll. | 457 // should not scroll. |
| 420 verticalScroll(40.f); | 458 verticalScroll(40.f); |
| 421 EXPECT_FLOAT_EQ(40.f, webView->browserControls().contentOffset()); | 459 EXPECT_FLOAT_EQ(40.f, webView->browserControls().contentOffset()); |
| 422 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->getScrollOffset()); | 460 EXPECT_SIZE_EQ( |
| 461 ScrollOffset(0, 80), |
| 462 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 423 | 463 |
| 424 // Continued scroll down up scroll up the main frame | 464 // Continued scroll down up scroll up the main frame |
| 425 verticalScroll(40.f); | 465 verticalScroll(40.f); |
| 426 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 466 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 427 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->getScrollOffset()); | 467 EXPECT_SIZE_EQ( |
| 468 ScrollOffset(0, 50), |
| 469 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 428 } | 470 } |
| 429 | 471 |
| 430 // Scrollable iframes should scroll before browser controls | 472 // Scrollable iframes should scroll before browser controls |
| 431 TEST_F(BrowserControlsTest, MAYBE(ScrollableIframeScrollFirst)) { | 473 TEST_F(BrowserControlsTest, MAYBE(ScrollableIframeScrollFirst)) { |
| 432 WebViewImpl* webView = initialize("iframe-scrolling.html"); | 474 WebViewImpl* webView = initialize("iframe-scrolling.html"); |
| 433 webView->resizeWithBrowserControls(webView->size(), 50.f, true); | 475 webView->resizeWithBrowserControls(webView->size(), 50.f, true); |
| 434 webView->browserControls().setShownRatio(1); | 476 webView->browserControls().setShownRatio(1); |
| 435 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 50), | 477 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 50), |
| 436 ProgrammaticScroll); | 478 ProgrammaticScroll); |
| 437 | 479 |
| 438 // Test scroll down | 480 // Test scroll down |
| 439 // Scroll down should scroll the iframe first but browser controls and main | 481 // Scroll down should scroll the iframe first but browser controls and main |
| 440 // frame should not scroll. | 482 // frame should not scroll. |
| 441 verticalScroll(-800.f); | 483 verticalScroll(-800.f); |
| 442 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 484 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 443 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->getScrollOffset()); | 485 EXPECT_SIZE_EQ( |
| 486 ScrollOffset(0, 50), |
| 487 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 444 | 488 |
| 445 // Continued scroll down should start hiding browser controls but main frame | 489 // Continued scroll down should start hiding browser controls but main frame |
| 446 // should not scroll. | 490 // should not scroll. |
| 447 verticalScroll(-40.f); | 491 verticalScroll(-40.f); |
| 448 EXPECT_FLOAT_EQ(10.f, webView->browserControls().contentOffset()); | 492 EXPECT_FLOAT_EQ(10.f, webView->browserControls().contentOffset()); |
| 449 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->getScrollOffset()); | 493 EXPECT_SIZE_EQ( |
| 494 ScrollOffset(0, 50), |
| 495 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 450 | 496 |
| 451 // Continued scroll down should scroll down the main frame | 497 // Continued scroll down should scroll down the main frame |
| 452 verticalScroll(-40.f); | 498 verticalScroll(-40.f); |
| 453 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 499 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 454 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->getScrollOffset()); | 500 EXPECT_SIZE_EQ( |
| 501 ScrollOffset(0, 80), |
| 502 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 455 | 503 |
| 456 // Test scroll up | 504 // Test scroll up |
| 457 // scroll up should scroll iframe first | 505 // scroll up should scroll iframe first |
| 458 verticalScroll(800.f); | 506 verticalScroll(800.f); |
| 459 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 507 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 460 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->getScrollOffset()); | 508 EXPECT_SIZE_EQ( |
| 509 ScrollOffset(0, 80), |
| 510 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 461 | 511 |
| 462 // Continued scroll up should start showing browser controls but main frame | 512 // Continued scroll up should start showing browser controls but main frame |
| 463 // should not scroll. | 513 // should not scroll. |
| 464 verticalScroll(40.f); | 514 verticalScroll(40.f); |
| 465 EXPECT_FLOAT_EQ(40.f, webView->browserControls().contentOffset()); | 515 EXPECT_FLOAT_EQ(40.f, webView->browserControls().contentOffset()); |
| 466 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->getScrollOffset()); | 516 EXPECT_SIZE_EQ( |
| 517 ScrollOffset(0, 80), |
| 518 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 467 | 519 |
| 468 // Continued scroll down up scroll up the main frame | 520 // Continued scroll down up scroll up the main frame |
| 469 verticalScroll(40.f); | 521 verticalScroll(40.f); |
| 470 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 522 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 471 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->getScrollOffset()); | 523 EXPECT_SIZE_EQ( |
| 524 ScrollOffset(0, 50), |
| 525 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 472 } | 526 } |
| 473 | 527 |
| 474 // Browser controls visibility should remain consistent when height is changed. | 528 // Browser controls visibility should remain consistent when height is changed. |
| 475 TEST_F(BrowserControlsTest, MAYBE(HeightChangeMaintainsVisibility)) { | 529 TEST_F(BrowserControlsTest, MAYBE(HeightChangeMaintainsVisibility)) { |
| 476 WebViewImpl* webView = initialize(); | 530 WebViewImpl* webView = initialize(); |
| 477 webView->resizeWithBrowserControls(webView->size(), 20.f, false); | 531 webView->resizeWithBrowserControls(webView->size(), 20.f, false); |
| 478 webView->browserControls().setShownRatio(0); | 532 webView->browserControls().setShownRatio(0); |
| 479 | 533 |
| 480 webView->resizeWithBrowserControls(webView->size(), 20.f, false); | 534 webView->resizeWithBrowserControls(webView->size(), 20.f, false); |
| 481 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 535 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 498 WebViewImpl* webView = initialize(); | 552 WebViewImpl* webView = initialize(); |
| 499 webView->resizeWithBrowserControls(webView->size(), 0, false); | 553 webView->resizeWithBrowserControls(webView->size(), 0, false); |
| 500 webView->browserControls().setShownRatio(0); | 554 webView->browserControls().setShownRatio(0); |
| 501 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), | 555 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100), |
| 502 ProgrammaticScroll); | 556 ProgrammaticScroll); |
| 503 | 557 |
| 504 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 558 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 505 | 559 |
| 506 verticalScroll(20.f); | 560 verticalScroll(20.f); |
| 507 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 561 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 508 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->getScrollOffset()); | 562 EXPECT_SIZE_EQ( |
| 563 ScrollOffset(0, 80), |
| 564 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 509 | 565 |
| 510 verticalScroll(-30.f); | 566 verticalScroll(-30.f); |
| 511 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 567 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 512 EXPECT_SIZE_EQ(ScrollOffset(0, 110), frame()->view()->getScrollOffset()); | 568 EXPECT_SIZE_EQ( |
| 569 ScrollOffset(0, 110), |
| 570 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 513 | 571 |
| 514 webView->browserControls().setShownRatio(1); | 572 webView->browserControls().setShownRatio(1); |
| 515 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); | 573 EXPECT_FLOAT_EQ(0.f, webView->browserControls().contentOffset()); |
| 516 } | 574 } |
| 517 | 575 |
| 518 // Browser controls should not hide when scrolling up past limit | 576 // Browser controls should not hide when scrolling up past limit |
| 519 TEST_F(BrowserControlsTest, MAYBE(ScrollUpPastLimitDoesNotHide)) { | 577 TEST_F(BrowserControlsTest, MAYBE(ScrollUpPastLimitDoesNotHide)) { |
| 520 WebViewImpl* webView = initialize(); | 578 WebViewImpl* webView = initialize(); |
| 521 // Initialize browser controls to be shown | 579 // Initialize browser controls to be shown |
| 522 webView->resizeWithBrowserControls(webView->size(), 50.f, true); | 580 webView->resizeWithBrowserControls(webView->size(), 50.f, true); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 | 615 |
| 558 // Setting permitted state should change the content offset to match the | 616 // Setting permitted state should change the content offset to match the |
| 559 // constraint. | 617 // constraint. |
| 560 webView->updateBrowserControlsState(WebBrowserControlsShown, | 618 webView->updateBrowserControlsState(WebBrowserControlsShown, |
| 561 WebBrowserControlsShown, false); | 619 WebBrowserControlsShown, false); |
| 562 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); | 620 EXPECT_FLOAT_EQ(50.f, webView->browserControls().contentOffset()); |
| 563 | 621 |
| 564 // Only shown state is permitted so controls cannot hide | 622 // Only shown state is permitted so controls cannot hide |
| 565 verticalScroll(-20.f); | 623 verticalScroll(-20.f); |
| 566 EXPECT_FLOAT_EQ(50, webView->browserControls().contentOffset()); | 624 EXPECT_FLOAT_EQ(50, webView->browserControls().contentOffset()); |
| 567 EXPECT_SIZE_EQ(ScrollOffset(0, 120), frame()->view()->getScrollOffset()); | 625 EXPECT_SIZE_EQ( |
| 626 ScrollOffset(0, 120), |
| 627 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 568 | 628 |
| 569 // Setting permitted state should change content offset to match the | 629 // Setting permitted state should change content offset to match the |
| 570 // constraint. | 630 // constraint. |
| 571 webView->updateBrowserControlsState(WebBrowserControlsHidden, | 631 webView->updateBrowserControlsState(WebBrowserControlsHidden, |
| 572 WebBrowserControlsHidden, false); | 632 WebBrowserControlsHidden, false); |
| 573 EXPECT_FLOAT_EQ(0, webView->browserControls().contentOffset()); | 633 EXPECT_FLOAT_EQ(0, webView->browserControls().contentOffset()); |
| 574 | 634 |
| 575 // Only hidden state is permitted so controls cannot show | 635 // Only hidden state is permitted so controls cannot show |
| 576 verticalScroll(30.f); | 636 verticalScroll(30.f); |
| 577 EXPECT_FLOAT_EQ(0, webView->browserControls().contentOffset()); | 637 EXPECT_FLOAT_EQ(0, webView->browserControls().contentOffset()); |
| 578 EXPECT_SIZE_EQ(ScrollOffset(0, 90), frame()->view()->getScrollOffset()); | 638 EXPECT_SIZE_EQ( |
| 639 ScrollOffset(0, 90), |
| 640 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 579 | 641 |
| 580 // Setting permitted state to "both" should not change content offset. | 642 // Setting permitted state to "both" should not change content offset. |
| 581 webView->updateBrowserControlsState(WebBrowserControlsBoth, | 643 webView->updateBrowserControlsState(WebBrowserControlsBoth, |
| 582 WebBrowserControlsBoth, false); | 644 WebBrowserControlsBoth, false); |
| 583 EXPECT_FLOAT_EQ(0, webView->browserControls().contentOffset()); | 645 EXPECT_FLOAT_EQ(0, webView->browserControls().contentOffset()); |
| 584 | 646 |
| 585 // Both states are permitted so controls can either show or hide | 647 // Both states are permitted so controls can either show or hide |
| 586 verticalScroll(50.f); | 648 verticalScroll(50.f); |
| 587 EXPECT_FLOAT_EQ(50, webView->browserControls().contentOffset()); | 649 EXPECT_FLOAT_EQ(50, webView->browserControls().contentOffset()); |
| 588 EXPECT_SIZE_EQ(ScrollOffset(0, 90), frame()->view()->getScrollOffset()); | 650 EXPECT_SIZE_EQ( |
| 651 ScrollOffset(0, 90), |
| 652 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 589 | 653 |
| 590 verticalScroll(-50.f); | 654 verticalScroll(-50.f); |
| 591 EXPECT_FLOAT_EQ(0, webView->browserControls().contentOffset()); | 655 EXPECT_FLOAT_EQ(0, webView->browserControls().contentOffset()); |
| 592 EXPECT_SIZE_EQ(ScrollOffset(0, 90), frame()->view()->getScrollOffset()); | 656 EXPECT_SIZE_EQ( |
| 657 ScrollOffset(0, 90), |
| 658 frame()->view()->layoutViewportScrollableArea()->getScrollOffset()); |
| 593 | 659 |
| 594 // Setting permitted state to "both" should not change an in-flight offset. | 660 // Setting permitted state to "both" should not change an in-flight offset. |
| 595 verticalScroll(20.f); | 661 verticalScroll(20.f); |
| 596 EXPECT_FLOAT_EQ(20, webView->browserControls().contentOffset()); | 662 EXPECT_FLOAT_EQ(20, webView->browserControls().contentOffset()); |
| 597 webView->updateBrowserControlsState(WebBrowserControlsBoth, | 663 webView->updateBrowserControlsState(WebBrowserControlsBoth, |
| 598 WebBrowserControlsBoth, false); | 664 WebBrowserControlsBoth, false); |
| 599 EXPECT_FLOAT_EQ(20, webView->browserControls().contentOffset()); | 665 EXPECT_FLOAT_EQ(20, webView->browserControls().contentOffset()); |
| 600 | 666 |
| 601 // An animated state change shouldn't cause a change to the content offset | 667 // An animated state change shouldn't cause a change to the content offset |
| 602 // since it'll be driven from the compositor. | 668 // since it'll be driven from the compositor. |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 view->setScrollOffset(view->getScrollOffset(), ProgrammaticScroll); | 919 view->setScrollOffset(view->getScrollOffset(), ProgrammaticScroll); |
| 854 | 920 |
| 855 ASSERT_EQ(80.f, webView->browserControls().contentOffset()); | 921 ASSERT_EQ(80.f, webView->browserControls().contentOffset()); |
| 856 EXPECT_EQ(expectedRootOffset, rootViewport->getScrollOffset().height()); | 922 EXPECT_EQ(expectedRootOffset, rootViewport->getScrollOffset().height()); |
| 857 | 923 |
| 858 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); | 924 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); |
| 859 } | 925 } |
| 860 } | 926 } |
| 861 | 927 |
| 862 } // namespace blink | 928 } // namespace blink |
| OLD | NEW |