Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: third_party/WebKit/Source/web/tests/TopControlsTest.cpp

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698