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 |