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

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

Issue 2387883002: Use float for scroll offset. (Closed)
Patch Set: Fix README.md 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 174 // Top controls should consume 25px and become hidden. Excess scroll should be
175 // consumed by the page. 175 // consumed by the page.
176 webView->handleInputEvent( 176 webView->handleInputEvent(
177 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); 177 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f));
178 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 178 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
179 EXPECT_POINT_EQ(IntPoint(0, 15), frame()->view()->scrollPosition()); 179 EXPECT_SIZE_EQ(ScrollOffset(0, 15), frame()->view()->scrollOffset());
180 180
181 // Only page should consume scroll 181 // Only page should consume scroll
182 webView->handleInputEvent( 182 webView->handleInputEvent(
183 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f)); 183 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f));
184 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 184 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
185 EXPECT_POINT_EQ(IntPoint(0, 35), frame()->view()->scrollPosition()); 185 EXPECT_SIZE_EQ(ScrollOffset(0, 35), frame()->view()->scrollOffset());
186 } 186 }
187 187
188 // Scrolling up should show top controls. 188 // Scrolling up should show top controls.
189 TEST_F(TopControlsTest, MAYBE(ShowOnScrollUp)) { 189 TEST_F(TopControlsTest, MAYBE(ShowOnScrollUp)) {
190 WebViewImpl* webView = initialize(); 190 WebViewImpl* webView = initialize();
191 // initialize top controls to be hidden. 191 // initialize top controls to be hidden.
192 webView->resizeWithTopControls(webView->size(), 50.f, false); 192 webView->resizeWithTopControls(webView->size(), 50.f, false);
193 webView->topControls().setShownRatio(0); 193 webView->topControls().setShownRatio(0);
194 194
195 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); 195 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin));
196 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 196 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
197 197
198 webView->handleInputEvent( 198 webView->handleInputEvent(
199 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f)); 199 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f));
200 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); 200 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset());
201 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->scrollPosition()); 201 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frame()->view()->scrollOffset());
202 202
203 webView->handleInputEvent( 203 webView->handleInputEvent(
204 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f)); 204 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f));
205 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 205 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
206 EXPECT_POINT_EQ(IntPoint(0, 0), frame()->view()->scrollPosition()); 206 EXPECT_SIZE_EQ(ScrollOffset(0, 0), frame()->view()->scrollOffset());
207 } 207 }
208 208
209 // Scrolling up after previous scroll downs should cause top controls to be 209 // Scrolling up after previous scroll downs should cause top controls to be
210 // shown only after all previously scrolled down amount is compensated. 210 // shown only after all previously scrolled down amount is compensated.
211 TEST_F(TopControlsTest, MAYBE(ScrollDownThenUp)) { 211 TEST_F(TopControlsTest, MAYBE(ScrollDownThenUp)) {
212 WebViewImpl* webView = initialize(); 212 WebViewImpl* webView = initialize();
213 // initialize top controls to be shown and position page at 100px. 213 // initialize top controls to be shown and position page at 100px.
214 webView->resizeWithTopControls(webView->size(), 50.f, true); 214 webView->resizeWithTopControls(webView->size(), 50.f, true);
215 webView->topControls().setShownRatio(1); 215 webView->topControls().setShownRatio(1);
216 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), 216 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100),
217 ProgrammaticScroll); 217 ProgrammaticScroll);
218 218
219 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); 219 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin));
220 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 220 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
221 221
222 // Scroll down to completely hide top controls. Excess deltaY (100px) should 222 // Scroll down to completely hide top controls. Excess deltaY (100px) should
223 // be consumed by the page. 223 // be consumed by the page.
224 webView->handleInputEvent( 224 webView->handleInputEvent(
225 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -150.f)); 225 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -150.f));
226 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 226 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
227 EXPECT_POINT_EQ(IntPoint(0, 200), frame()->view()->scrollPosition()); 227 EXPECT_SIZE_EQ(ScrollOffset(0, 200), frame()->view()->scrollOffset());
228 228
229 // Scroll up and ensure the top controls does not move until we recover 100px 229 // Scroll up and ensure the top controls does not move until we recover 100px
230 // previously scrolled. 230 // previously scrolled.
231 webView->handleInputEvent( 231 webView->handleInputEvent(
232 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 40.f)); 232 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 40.f));
233 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 233 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
234 EXPECT_POINT_EQ(IntPoint(0, 160), frame()->view()->scrollPosition()); 234 EXPECT_SIZE_EQ(ScrollOffset(0, 160), frame()->view()->scrollOffset());
235 235
236 webView->handleInputEvent( 236 webView->handleInputEvent(
237 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 60.f)); 237 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 60.f));
238 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 238 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
239 EXPECT_POINT_EQ(IntPoint(0, 100), frame()->view()->scrollPosition()); 239 EXPECT_SIZE_EQ(ScrollOffset(0, 100), frame()->view()->scrollOffset());
240 240
241 // Now we have hit the threshold so further scroll up should be consumed by 241 // Now we have hit the threshold so further scroll up should be consumed by
242 // top controls. 242 // top controls.
243 webView->handleInputEvent( 243 webView->handleInputEvent(
244 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 30.f)); 244 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 30.f));
245 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); 245 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset());
246 EXPECT_POINT_EQ(IntPoint(0, 100), frame()->view()->scrollPosition()); 246 EXPECT_SIZE_EQ(ScrollOffset(0, 100), frame()->view()->scrollOffset());
247 247
248 // Once top control is fully shown then page should consume any excess scroll. 248 // Once top control is fully shown then page should consume any excess scroll.
249 webView->handleInputEvent( 249 webView->handleInputEvent(
250 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 70.f)); 250 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 70.f));
251 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 251 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
252 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); 252 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset());
253 } 253 }
254 254
255 // Scrolling down should always cause visible top controls to start hiding even 255 // Scrolling down should always cause visible top controls to start hiding even
256 // if we have been scrolling up previously. 256 // if we have been scrolling up previously.
257 TEST_F(TopControlsTest, MAYBE(ScrollUpThenDown)) { 257 TEST_F(TopControlsTest, MAYBE(ScrollUpThenDown)) {
258 WebViewImpl* webView = initialize(); 258 WebViewImpl* webView = initialize();
259 // initialize top controls to be hidden and position page at 100px. 259 // initialize top controls to be hidden and position page at 100px.
260 webView->resizeWithTopControls(webView->size(), 50.f, false); 260 webView->resizeWithTopControls(webView->size(), 50.f, false);
261 webView->topControls().setShownRatio(0); 261 webView->topControls().setShownRatio(0);
262 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), 262 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100),
263 ProgrammaticScroll); 263 ProgrammaticScroll);
264 264
265 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); 265 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin));
266 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 266 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
267 267
268 // Scroll up to completely show top controls. Excess deltaY (50px) should be 268 // Scroll up to completely show top controls. Excess deltaY (50px) should be
269 // consumed by the page. 269 // consumed by the page.
270 webView->handleInputEvent( 270 webView->handleInputEvent(
271 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 100.f)); 271 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 100.f));
272 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 272 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
273 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); 273 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset());
274 274
275 // Scroll down and ensure only top controls is scrolled 275 // Scroll down and ensure only top controls is scrolled
276 webView->handleInputEvent( 276 webView->handleInputEvent(
277 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f)); 277 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -40.f));
278 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); 278 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset());
279 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); 279 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset());
280 280
281 webView->handleInputEvent( 281 webView->handleInputEvent(
282 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -60.f)); 282 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -60.f));
283 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 283 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
284 EXPECT_POINT_EQ(IntPoint(0, 100), frame()->view()->scrollPosition()); 284 EXPECT_SIZE_EQ(ScrollOffset(0, 100), frame()->view()->scrollOffset());
285 } 285 }
286 286
287 // Top controls should not consume horizontal scroll. 287 // Top controls should not consume horizontal scroll.
288 TEST_F(TopControlsTest, MAYBE(HorizontalScroll)) { 288 TEST_F(TopControlsTest, MAYBE(HorizontalScroll)) {
289 WebViewImpl* webView = initialize(); 289 WebViewImpl* webView = initialize();
290 // initialize top controls to be shown. 290 // initialize top controls to be shown.
291 webView->resizeWithTopControls(webView->size(), 50.f, true); 291 webView->resizeWithTopControls(webView->size(), 50.f, true);
292 webView->topControls().setShownRatio(1); 292 webView->topControls().setShownRatio(1);
293 293
294 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); 294 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin));
295 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 295 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
296 296
297 // Top controls should not consume horizontal scroll. 297 // Top controls should not consume horizontal scroll.
298 webView->handleInputEvent( 298 webView->handleInputEvent(
299 generateEvent(WebInputEvent::GestureScrollUpdate, -110.f, -100.f)); 299 generateEvent(WebInputEvent::GestureScrollUpdate, -110.f, -100.f));
300 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 300 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
301 EXPECT_POINT_EQ(IntPoint(110, 50), frame()->view()->scrollPosition()); 301 EXPECT_SIZE_EQ(ScrollOffset(110, 50), frame()->view()->scrollOffset());
302 302
303 webView->handleInputEvent( 303 webView->handleInputEvent(
304 generateEvent(WebInputEvent::GestureScrollUpdate, -40.f, 0)); 304 generateEvent(WebInputEvent::GestureScrollUpdate, -40.f, 0));
305 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 305 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
306 EXPECT_POINT_EQ(IntPoint(150, 50), frame()->view()->scrollPosition()); 306 EXPECT_SIZE_EQ(ScrollOffset(150, 50), frame()->view()->scrollOffset());
307 } 307 }
308 308
309 // Page scale should not impact top controls scrolling 309 // Page scale should not impact top controls scrolling
310 TEST_F(TopControlsTest, MAYBE(PageScaleHasNoImpact)) { 310 TEST_F(TopControlsTest, MAYBE(PageScaleHasNoImpact)) {
311 WebViewImpl* webView = initialize(); 311 WebViewImpl* webView = initialize();
312 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); 312 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5);
313 webView->setPageScaleFactor(2.0); 313 webView->setPageScaleFactor(2.0);
314 314
315 // Initialize top controls to be shown. 315 // Initialize top controls to be shown.
316 webView->resizeWithTopControls(webView->size(), 50.f, true); 316 webView->resizeWithTopControls(webView->size(), 50.f, true);
317 webView->topControls().setShownRatio(1); 317 webView->topControls().setShownRatio(1);
318 318
319 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); 319 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin));
320 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 320 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
321 321
322 // Top controls should be scrolled partially and page should not scroll. 322 // Top controls should be scrolled partially and page should not scroll.
323 webView->handleInputEvent( 323 webView->handleInputEvent(
324 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f)); 324 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -20.f));
325 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); 325 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset());
326 EXPECT_POINT_EQ(IntPoint(0, 0), 326 EXPECT_SIZE_EQ(ScrollOffset(0, 0),
327 frame()->view()->getScrollableArea()->scrollPositionDouble()); 327 frame()->view()->getScrollableArea()->scrollOffset());
328 328
329 // Top controls should consume 30px and become hidden. Excess scroll should be 329 // Top controls should consume 30px and become hidden. Excess scroll should be
330 // consumed by the page at 2x scale. 330 // consumed by the page at 2x scale.
331 webView->handleInputEvent( 331 webView->handleInputEvent(
332 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -70.f)); 332 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -70.f));
333 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 333 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
334 EXPECT_POINT_EQ(IntPoint(0, 20), 334 EXPECT_SIZE_EQ(ScrollOffset(0, 20),
335 frame()->view()->getScrollableArea()->scrollPositionDouble()); 335 frame()->view()->getScrollableArea()->scrollOffset());
336 336
337 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); 337 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd));
338 338
339 // Change page scale and test. 339 // Change page scale and test.
340 webView->setPageScaleFactor(0.5); 340 webView->setPageScaleFactor(0.5);
341 341
342 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); 342 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin));
343 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 343 EXPECT_FLOAT_EQ(0.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 webView->handleInputEvent( 347 webView->handleInputEvent(
348 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f)); 348 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 50.f));
349 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 349 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
350 EXPECT_POINT_EQ(IntPoint(0, 20), 350 EXPECT_SIZE_EQ(ScrollOffset(0, 20),
351 frame()->view()->getScrollableArea()->scrollPositionDouble()); 351 frame()->view()->getScrollableArea()->scrollOffset());
352 352
353 // At 0.5x scale scrolling 10px should take us to the top of the page. 353 // At 0.5x scale scrolling 10px should take us to the top of the page.
354 webView->handleInputEvent( 354 webView->handleInputEvent(
355 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f)); 355 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 10.f));
356 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 356 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
357 EXPECT_POINT_EQ(IntPoint(0, 0), 357 EXPECT_SIZE_EQ(ScrollOffset(0, 0),
358 frame()->view()->getScrollableArea()->scrollPositionDouble()); 358 frame()->view()->getScrollableArea()->scrollOffset());
359 } 359 }
360 360
361 // Some scroll deltas result in a shownRatio that can't be realized in a 361 // Some scroll deltas result in a shownRatio that can't be realized in a
362 // floating-point number. Make sure that if the top controls aren't fully 362 // floating-point number. Make sure that if the top controls aren't fully
363 // scrolled, scrollBy doesn't return any excess delta. i.e. There should be no 363 // scrolled, scrollBy doesn't return any excess delta. i.e. There should be no
364 // slippage between the content and top controls. 364 // slippage between the content and top controls.
365 TEST_F(TopControlsTest, MAYBE(FloatingPointSlippage)) { 365 TEST_F(TopControlsTest, MAYBE(FloatingPointSlippage)) {
366 WebViewImpl* webView = initialize(); 366 WebViewImpl* webView = initialize();
367 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5); 367 webViewImpl()->setDefaultPageScaleLimits(0.25f, 5);
368 webView->setPageScaleFactor(2.0); 368 webView->setPageScaleFactor(2.0);
(...skipping 10 matching lines...) Expand all
379 // that scroll still consumes the whole delta. 379 // that scroll still consumes the whole delta.
380 FloatSize remainingDelta = webView->topControls().scrollBy(FloatSize(0, 10)); 380 FloatSize remainingDelta = webView->topControls().scrollBy(FloatSize(0, 10));
381 EXPECT_EQ(0, remainingDelta.height()); 381 EXPECT_EQ(0, remainingDelta.height());
382 } 382 }
383 383
384 // Scrollable subregions should scroll before top controls 384 // Scrollable subregions should scroll before top controls
385 TEST_F(TopControlsTest, MAYBE(ScrollableSubregionScrollFirst)) { 385 TEST_F(TopControlsTest, MAYBE(ScrollableSubregionScrollFirst)) {
386 WebViewImpl* webView = initialize("overflow-scrolling.html"); 386 WebViewImpl* webView = initialize("overflow-scrolling.html");
387 webView->resizeWithTopControls(webView->size(), 50.f, true); 387 webView->resizeWithTopControls(webView->size(), 50.f, true);
388 webView->topControls().setShownRatio(1); 388 webView->topControls().setShownRatio(1);
389 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 50), 389 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 50),
390 ProgrammaticScroll); 390 ProgrammaticScroll);
391 391
392 // Test scroll down 392 // Test scroll down
393 // Scroll down should scroll the overflow div first but top controls and main 393 // Scroll down should scroll the overflow div first but top controls and main
394 // frame should not scroll. 394 // frame should not scroll.
395 verticalScroll(-800.f); 395 verticalScroll(-800.f);
396 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 396 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
397 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); 397 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset());
398 398
399 // Continued scroll down should start hiding top controls but main frame 399 // Continued scroll down should start hiding top controls but main frame
400 // should not scroll. 400 // should not scroll.
401 verticalScroll(-40.f); 401 verticalScroll(-40.f);
402 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); 402 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset());
403 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); 403 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset());
404 404
405 // Continued scroll down should scroll down the main frame 405 // Continued scroll down should scroll down the main frame
406 verticalScroll(-40.f); 406 verticalScroll(-40.f);
407 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 407 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
408 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); 408 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset());
409 409
410 // Test scroll up 410 // Test scroll up
411 // scroll up should scroll overflow div first 411 // scroll up should scroll overflow div first
412 verticalScroll(800.f); 412 verticalScroll(800.f);
413 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 413 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
414 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); 414 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset());
415 415
416 // Continued scroll up should start showing top controls but main frame should 416 // Continued scroll up should start showing top controls but main frame should
417 // not scroll. 417 // not scroll.
418 verticalScroll(40.f); 418 verticalScroll(40.f);
419 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset()); 419 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset());
420 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); 420 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset());
421 421
422 // Continued scroll down up scroll up the main frame 422 // Continued scroll down up scroll up the main frame
423 verticalScroll(40.f); 423 verticalScroll(40.f);
424 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 424 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
425 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); 425 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset());
426 } 426 }
427 427
428 // Scrollable iframes should scroll before top controls 428 // Scrollable iframes should scroll before top controls
429 TEST_F(TopControlsTest, MAYBE(ScrollableIframeScrollFirst)) { 429 TEST_F(TopControlsTest, MAYBE(ScrollableIframeScrollFirst)) {
430 WebViewImpl* webView = initialize("iframe-scrolling.html"); 430 WebViewImpl* webView = initialize("iframe-scrolling.html");
431 webView->resizeWithTopControls(webView->size(), 50.f, true); 431 webView->resizeWithTopControls(webView->size(), 50.f, true);
432 webView->topControls().setShownRatio(1); 432 webView->topControls().setShownRatio(1);
433 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 50), 433 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 50),
434 ProgrammaticScroll); 434 ProgrammaticScroll);
435 435
436 // Test scroll down 436 // Test scroll down
437 // Scroll down should scroll the iframe first but top controls and main frame 437 // Scroll down should scroll the iframe first but top controls and main frame
438 // should not scroll. 438 // should not scroll.
439 verticalScroll(-800.f); 439 verticalScroll(-800.f);
440 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 440 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
441 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); 441 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset());
442 442
443 // Continued scroll down should start hiding top controls but main frame 443 // Continued scroll down should start hiding top controls but main frame
444 // should not scroll. 444 // should not scroll.
445 verticalScroll(-40.f); 445 verticalScroll(-40.f);
446 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset()); 446 EXPECT_FLOAT_EQ(10.f, webView->topControls().contentOffset());
447 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); 447 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset());
448 448
449 // Continued scroll down should scroll down the main frame 449 // Continued scroll down should scroll down the main frame
450 verticalScroll(-40.f); 450 verticalScroll(-40.f);
451 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 451 EXPECT_FLOAT_EQ(0.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 // Test scroll up 454 // Test scroll up
455 // scroll up should scroll iframe first 455 // scroll up should scroll iframe first
456 verticalScroll(800.f); 456 verticalScroll(800.f);
457 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 457 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
458 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); 458 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset());
459 459
460 // Continued scroll up should start showing top controls but main frame should 460 // Continued scroll up should start showing top controls but main frame should
461 // not scroll. 461 // not scroll.
462 verticalScroll(40.f); 462 verticalScroll(40.f);
463 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset()); 463 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset());
464 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); 464 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset());
465 465
466 // Continued scroll down up scroll up the main frame 466 // Continued scroll down up scroll up the main frame
467 verticalScroll(40.f); 467 verticalScroll(40.f);
468 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 468 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
469 EXPECT_POINT_EQ(IntPoint(0, 50), frame()->view()->scrollPosition()); 469 EXPECT_SIZE_EQ(ScrollOffset(0, 50), frame()->view()->scrollOffset());
470 } 470 }
471 471
472 // Top controls visibility should remain consistent when height is changed. 472 // Top controls visibility should remain consistent when height is changed.
473 TEST_F(TopControlsTest, MAYBE(HeightChangeMaintainsVisibility)) { 473 TEST_F(TopControlsTest, MAYBE(HeightChangeMaintainsVisibility)) {
474 WebViewImpl* webView = initialize(); 474 WebViewImpl* webView = initialize();
475 webView->resizeWithTopControls(webView->size(), 20.f, false); 475 webView->resizeWithTopControls(webView->size(), 20.f, false);
476 webView->topControls().setShownRatio(0); 476 webView->topControls().setShownRatio(0);
477 477
478 webView->resizeWithTopControls(webView->size(), 20.f, false); 478 webView->resizeWithTopControls(webView->size(), 20.f, false);
479 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 479 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
480 480
481 webView->resizeWithTopControls(webView->size(), 40.f, false); 481 webView->resizeWithTopControls(webView->size(), 40.f, false);
482 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 482 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
483 483
484 // Scroll up to show top controls. 484 // Scroll up to show top controls.
485 verticalScroll(40.f); 485 verticalScroll(40.f);
486 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset()); 486 EXPECT_FLOAT_EQ(40.f, webView->topControls().contentOffset());
487 487
488 // Changing height of a fully shown top controls should correctly adjust 488 // Changing height of a fully shown top controls should correctly adjust
489 // content offset 489 // content offset
490 webView->resizeWithTopControls(webView->size(), 30.f, false); 490 webView->resizeWithTopControls(webView->size(), 30.f, false);
491 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset()); 491 EXPECT_FLOAT_EQ(30.f, webView->topControls().contentOffset());
492 } 492 }
493 493
494 // Zero delta should not have any effect on top controls. 494 // Zero delta should not have any effect on top controls.
495 TEST_F(TopControlsTest, MAYBE(ZeroHeightMeansNoEffect)) { 495 TEST_F(TopControlsTest, MAYBE(ZeroHeightMeansNoEffect)) {
496 WebViewImpl* webView = initialize(); 496 WebViewImpl* webView = initialize();
497 webView->resizeWithTopControls(webView->size(), 0, false); 497 webView->resizeWithTopControls(webView->size(), 0, false);
498 webView->topControls().setShownRatio(0); 498 webView->topControls().setShownRatio(0);
499 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), 499 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100),
500 ProgrammaticScroll); 500 ProgrammaticScroll);
501 501
502 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 502 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
503 503
504 verticalScroll(20.f); 504 verticalScroll(20.f);
505 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 505 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
506 EXPECT_POINT_EQ(IntPoint(0, 80), frame()->view()->scrollPosition()); 506 EXPECT_SIZE_EQ(ScrollOffset(0, 80), frame()->view()->scrollOffset());
507 507
508 verticalScroll(-30.f); 508 verticalScroll(-30.f);
509 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 509 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
510 EXPECT_POINT_EQ(IntPoint(0, 110), frame()->view()->scrollPosition()); 510 EXPECT_SIZE_EQ(ScrollOffset(0, 110), frame()->view()->scrollOffset());
511 511
512 webView->topControls().setShownRatio(1); 512 webView->topControls().setShownRatio(1);
513 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset()); 513 EXPECT_FLOAT_EQ(0.f, webView->topControls().contentOffset());
514 } 514 }
515 515
516 // Top controls should not hide when scrolling up past limit 516 // Top controls should not hide when scrolling up past limit
517 TEST_F(TopControlsTest, MAYBE(ScrollUpPastLimitDoesNotHide)) { 517 TEST_F(TopControlsTest, MAYBE(ScrollUpPastLimitDoesNotHide)) {
518 WebViewImpl* webView = initialize(); 518 WebViewImpl* webView = initialize();
519 // Initialize top controls to be shown 519 // Initialize top controls to be shown
520 webView->resizeWithTopControls(webView->size(), 50.f, true); 520 webView->resizeWithTopControls(webView->size(), 50.f, true);
(...skipping 21 matching lines...) Expand all
542 verticalScroll(-30.f); 542 verticalScroll(-30.f);
543 // Top controls should not move because neither frameview nor visual viewport 543 // Top controls should not move because neither frameview nor visual viewport
544 // are scrollable 544 // are scrollable
545 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 545 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
546 } 546 }
547 547
548 // Top controls should honor its constraints 548 // Top controls should honor its constraints
549 TEST_F(TopControlsTest, MAYBE(StateConstraints)) { 549 TEST_F(TopControlsTest, MAYBE(StateConstraints)) {
550 WebViewImpl* webView = initialize(); 550 WebViewImpl* webView = initialize();
551 webView->resizeWithTopControls(webView->size(), 50.f, false); 551 webView->resizeWithTopControls(webView->size(), 50.f, false);
552 frame()->view()->getScrollableArea()->setScrollPosition(IntPoint(0, 100), 552 frame()->view()->getScrollableArea()->setScrollOffset(ScrollOffset(0, 100),
553 ProgrammaticScroll); 553 ProgrammaticScroll);
554 554
555 // Setting permitted state should change the content offset to match the 555 // Setting permitted state should change the content offset to match the
556 // constraint. 556 // constraint.
557 webView->updateTopControlsState(WebTopControlsShown, WebTopControlsShown, 557 webView->updateTopControlsState(WebTopControlsShown, WebTopControlsShown,
558 false); 558 false);
559 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset()); 559 EXPECT_FLOAT_EQ(50.f, webView->topControls().contentOffset());
560 560
561 // Only shown state is permitted so controls cannot hide 561 // Only shown state is permitted so controls cannot hide
562 verticalScroll(-20.f); 562 verticalScroll(-20.f);
563 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset()); 563 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset());
564 EXPECT_POINT_EQ(IntPoint(0, 120), frame()->view()->scrollPosition()); 564 EXPECT_SIZE_EQ(ScrollOffset(0, 120), frame()->view()->scrollOffset());
565 565
566 // Setting permitted state should change content offset to match the 566 // Setting permitted state should change content offset to match the
567 // constraint. 567 // constraint.
568 webView->updateTopControlsState(WebTopControlsHidden, WebTopControlsHidden, 568 webView->updateTopControlsState(WebTopControlsHidden, WebTopControlsHidden,
569 false); 569 false);
570 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); 570 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset());
571 571
572 // Only hidden state is permitted so controls cannot show 572 // Only hidden state is permitted so controls cannot show
573 verticalScroll(30.f); 573 verticalScroll(30.f);
574 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); 574 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset());
575 EXPECT_POINT_EQ(IntPoint(0, 90), frame()->view()->scrollPosition()); 575 EXPECT_SIZE_EQ(ScrollOffset(0, 90), frame()->view()->scrollOffset());
576 576
577 // Setting permitted state to "both" should not change content offset. 577 // Setting permitted state to "both" should not change content offset.
578 webView->updateTopControlsState(WebTopControlsBoth, WebTopControlsBoth, 578 webView->updateTopControlsState(WebTopControlsBoth, WebTopControlsBoth,
579 false); 579 false);
580 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); 580 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset());
581 581
582 // Both states are permitted so controls can either show or hide 582 // Both states are permitted so controls can either show or hide
583 verticalScroll(50.f); 583 verticalScroll(50.f);
584 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset()); 584 EXPECT_FLOAT_EQ(50, webView->topControls().contentOffset());
585 EXPECT_POINT_EQ(IntPoint(0, 90), frame()->view()->scrollPosition()); 585 EXPECT_SIZE_EQ(ScrollOffset(0, 90), frame()->view()->scrollOffset());
586 586
587 verticalScroll(-50.f); 587 verticalScroll(-50.f);
588 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset()); 588 EXPECT_FLOAT_EQ(0, webView->topControls().contentOffset());
589 EXPECT_POINT_EQ(IntPoint(0, 90), frame()->view()->scrollPosition()); 589 EXPECT_SIZE_EQ(ScrollOffset(0, 90), frame()->view()->scrollOffset());
590 590
591 // Setting permitted state to "both" should not change an in-flight offset. 591 // Setting permitted state to "both" should not change an in-flight offset.
592 verticalScroll(20.f); 592 verticalScroll(20.f);
593 EXPECT_FLOAT_EQ(20, webView->topControls().contentOffset()); 593 EXPECT_FLOAT_EQ(20, webView->topControls().contentOffset());
594 webView->updateTopControlsState(WebTopControlsBoth, WebTopControlsBoth, 594 webView->updateTopControlsState(WebTopControlsBoth, WebTopControlsBoth,
595 false); 595 false);
596 EXPECT_FLOAT_EQ(20, webView->topControls().contentOffset()); 596 EXPECT_FLOAT_EQ(20, webView->topControls().contentOffset());
597 597
598 // An animated state change shouldn't cause a change to the content offset 598 // An animated state change shouldn't cause a change to the content offset
599 // since it'll be driven from the compositor. 599 // since it'll be driven from the compositor.
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
805 805
806 // Zoom in to 2X and fully scroll both viewports. 806 // Zoom in to 2X and fully scroll both viewports.
807 webView->setPageScaleFactor(pageScale); 807 webView->setPageScaleFactor(pageScale);
808 { 808 {
809 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); 809 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin));
810 webView->handleInputEvent( 810 webView->handleInputEvent(
811 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -10000)); 811 generateEvent(WebInputEvent::GestureScrollUpdate, 0, -10000));
812 812
813 ASSERT_EQ(0.f, webView->topControls().contentOffset()); 813 ASSERT_EQ(0.f, webView->topControls().contentOffset());
814 814
815 EXPECT_EQ(expectedVisualOffset, visualViewport().location().y()); 815 EXPECT_EQ(expectedVisualOffset, visualViewport().scrollOffset().height());
816 EXPECT_EQ(expectedLayoutOffset, 816 EXPECT_EQ(expectedLayoutOffset,
817 view->layoutViewportScrollableArea()->scrollPosition().y()); 817 view->layoutViewportScrollableArea()->scrollOffset().height());
818 EXPECT_EQ(expectedRootOffset, rootViewport->scrollPosition().y()); 818 EXPECT_EQ(expectedRootOffset, rootViewport->scrollOffset().height());
819 819
820 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); 820 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd));
821 } 821 }
822 822
823 // Commit the top controls resize so that the top controls do not shrink the 823 // Commit the top controls resize so that the top controls do not shrink the
824 // layout size. This should not have moved any of the viewports. 824 // layout size. This should not have moved any of the viewports.
825 webView->resizeWithTopControls( 825 webView->resizeWithTopControls(
826 WebSize(800, layoutViewportHeight + topControlsHeight), topControlsHeight, 826 WebSize(800, layoutViewportHeight + topControlsHeight), topControlsHeight,
827 false); 827 false);
828 webView->updateAllLifecyclePhases(); 828 webView->updateAllLifecyclePhases();
829 ASSERT_EQ(expectedVisualOffset, visualViewport().location().y()); 829 ASSERT_EQ(expectedVisualOffset, visualViewport().scrollOffset().height());
830 ASSERT_EQ(expectedLayoutOffset, 830 ASSERT_EQ(expectedLayoutOffset,
831 view->layoutViewportScrollableArea()->scrollPosition().y()); 831 view->layoutViewportScrollableArea()->scrollOffset().height());
832 ASSERT_EQ(expectedRootOffset, rootViewport->scrollPosition().y()); 832 ASSERT_EQ(expectedRootOffset, rootViewport->scrollOffset().height());
833 833
834 // Now scroll back up just enough to show the top controls. The top controls 834 // Now scroll back up just enough to show the top controls. The top controls
835 // should shrink both viewports but the layout viewport by a greater amount. 835 // should shrink both viewports but the layout viewport by a greater amount.
836 // This means the visual viewport's offset must be clamped to keep it within 836 // This means the visual viewport's offset must be clamped to keep it within
837 // the layout viewport. Make sure we adjust the scroll position to account 837 // the layout viewport. Make sure we adjust the scroll position to account
838 // for this and keep the visual viewport at the same location relative to 838 // for this and keep the visual viewport at the same location relative to
839 // the document (i.e. the user shouldn't see a movement). 839 // the document (i.e. the user shouldn't see a movement).
840 { 840 {
841 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin)); 841 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollBegin));
842 webView->handleInputEvent( 842 webView->handleInputEvent(
843 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 80)); 843 generateEvent(WebInputEvent::GestureScrollUpdate, 0, 80));
844 844
845 visualViewport().clampToBoundaries(); 845 visualViewport().clampToBoundaries();
846 view->setScrollPosition(view->scrollPosition(), ProgrammaticScroll); 846 view->setScrollOffset(view->scrollOffset(), ProgrammaticScroll);
847 847
848 ASSERT_EQ(80.f, webView->topControls().contentOffset()); 848 ASSERT_EQ(80.f, webView->topControls().contentOffset());
849 EXPECT_EQ(expectedRootOffset, rootViewport->scrollPosition().y()); 849 EXPECT_EQ(expectedRootOffset, rootViewport->scrollOffset().height());
850 850
851 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd)); 851 webView->handleInputEvent(generateEvent(WebInputEvent::GestureScrollEnd));
852 } 852 }
853 } 853 }
854 854
855 } // namespace blink 855 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698