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

Side by Side Diff: third_party/WebKit/Source/web/WebViewImpl.cpp

Issue 1844013002: Fix main thread top controls scrolling to mirror CC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@propertyTreesBoundsDelta
Patch Set: Whitespace Created 4 years, 8 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) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 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 1809 matching lines...) Expand 10 before | Expand all | Expand 10 after
1820 1820
1821 WebLocalFrameImpl* mainFrame = mainFrameImpl(); 1821 WebLocalFrameImpl* mainFrame = mainFrameImpl();
1822 if (!mainFrame) 1822 if (!mainFrame)
1823 return; 1823 return;
1824 1824
1825 FrameView* view = mainFrame->frameView(); 1825 FrameView* view = mainFrame->frameView();
1826 if (!view) 1826 if (!view)
1827 return; 1827 return;
1828 1828
1829 VisualViewport& visualViewport = page()->frameHost().visualViewport(); 1829 VisualViewport& visualViewport = page()->frameHost().visualViewport();
1830 float topControlsViewportAdjustment = topControls().layoutHeight() - topCont rols().contentOffset();
1831 visualViewport.setTopControlsAdjustment(topControlsViewportAdjustment);
1832 1830
1833 // Shrink the FrameView by the amount that will maintain the aspect-ratio wi th the VisualViewport. 1831 {
1834 view->setTopControlsViewportAdjustment(topControlsViewportAdjustment / minim umPageScaleFactor()); 1832 // This object will save the current visual viewport offset w.r.t. the
1833 // document and restore it when the object goes out of scope. It's
1834 // needed since the top controls adjustment will change the maximum
1835 // scroll offset and we may need to reposition them to keep the user's
1836 // apparent position unchanged.
1837 ResizeViewportAnchor anchor(*view, visualViewport);
1838
1839 float topControlsViewportAdjustment =
1840 topControls().layoutHeight() - topControls().contentOffset();
1841 visualViewport.setTopControlsAdjustment(topControlsViewportAdjustment);
1842
1843 // Since the FrameView is sized to be the visual viewport at minimum
1844 // scale, its adjustment must also be scaled by the minimum scale.
1845 view->setTopControlsViewportAdjustment(
1846 topControlsViewportAdjustment / minimumPageScaleFactor());
1847
1848 // Clamp the scroll offset of each viewport now that their bounds have
1849 // changed. We'll try to restore hte saved scroll offset when anchor
majidvp 2016/04/01 17:09:36 s/hte/the/
bokan 2016/04/05 17:11:40 Done.
1850 // goes out of scope.
1851 visualViewport.clampToBoundaries();
1852 view->setScrollPosition(view->scrollPositionDouble(), ProgrammaticScroll );
majidvp 2016/04/01 17:09:36 Shouldn't this be unnecessary? The anchor sets the
bokan 2016/04/05 17:11:40 But the anchor needs the viewports to be at their
1853 }
1835 } 1854 }
1836 1855
1837 TopControls& WebViewImpl::topControls() 1856 TopControls& WebViewImpl::topControls()
1838 { 1857 {
1839 return page()->frameHost().topControls(); 1858 return page()->frameHost().topControls();
1840 } 1859 }
1841 1860
1842 void WebViewImpl::resizeViewWhileAnchored(FrameView* view) 1861 void WebViewImpl::resizeViewWhileAnchored(FrameView* view)
1843 { 1862 {
1844 ASSERT(mainFrameImpl() && mainFrameImpl()->frame()->isLocalFrame()); 1863 ASSERT(mainFrameImpl() && mainFrameImpl()->frame()->isLocalFrame());
(...skipping 2478 matching lines...) Expand 10 before | Expand all | Expand 10 after
4323 const WebFloatSize& elasticOverscrollDelta, 4342 const WebFloatSize& elasticOverscrollDelta,
4324 float pageScaleDelta, 4343 float pageScaleDelta,
4325 float topControlsShownRatioDelta) 4344 float topControlsShownRatioDelta)
4326 { 4345 {
4327 if (!mainFrameImpl()) 4346 if (!mainFrameImpl())
4328 return; 4347 return;
4329 FrameView* frameView = mainFrameImpl()->frameView(); 4348 FrameView* frameView = mainFrameImpl()->frameView();
4330 if (!frameView) 4349 if (!frameView)
4331 return; 4350 return;
4332 4351
4352 ScrollableArea* layoutViewport = frameView->layoutViewportScrollableArea();
4353 VisualViewport& visualViewport = page()->frameHost().visualViewport();
4354
4355 // Store the desired offsets for visual and layout viewports before setting
4356 // the top controls ratio since doing so will change the bounds and move the
4357 // viewports to keep the offsets valid. The compositor may have already done
4358 // that so we don't want to double apply the deltas here.
4359 FloatPoint visualViewportOffset = visualViewport.visibleRect().location();
4360 visualViewportOffset.move(
4361 visualViewportDelta.width,
4362 visualViewportDelta.height);
4363 DoublePoint layoutViewportPosition = layoutViewport->scrollPositionDouble()
4364 + DoubleSize(layoutViewportDelta.width, layoutViewportDelta.height);
4365
4333 topControls().setShownRatio(topControls().shownRatio() + topControlsShownRat ioDelta); 4366 topControls().setShownRatio(topControls().shownRatio() + topControlsShownRat ioDelta);
4334 4367
4335 FloatPoint visualViewportOffset = page()->frameHost().visualViewport().visib leRect().location();
4336 visualViewportOffset.move(visualViewportDelta.width, visualViewportDelta.hei ght);
4337 setPageScaleFactorAndLocation(pageScaleFactor() * pageScaleDelta, visualView portOffset); 4368 setPageScaleFactorAndLocation(pageScaleFactor() * pageScaleDelta, visualView portOffset);
4338 4369
4339 if (pageScaleDelta != 1) { 4370 if (pageScaleDelta != 1) {
4340 m_doubleTapZoomPending = false; 4371 m_doubleTapZoomPending = false;
4341 page()->frameHost().visualViewport().userDidChangeScale(); 4372 visualViewport.userDidChangeScale();
4342 } 4373 }
4343 4374
4344 m_elasticOverscroll += elasticOverscrollDelta; 4375 m_elasticOverscroll += elasticOverscrollDelta;
4345 frameView->didUpdateElasticOverscroll(); 4376 frameView->didUpdateElasticOverscroll();
4346 4377
4347 ScrollableArea* layoutViewport = frameView->layoutViewportScrollableArea();
4348
4349 DoublePoint layoutViewportPosition = layoutViewport->scrollPositionDouble()
4350 + DoubleSize(layoutViewportDelta.width, layoutViewportDelta.height);
4351
4352 if (layoutViewport->scrollPositionDouble() != layoutViewportPosition) { 4378 if (layoutViewport->scrollPositionDouble() != layoutViewportPosition) {
4353 layoutViewport->setScrollPosition(layoutViewportPosition, CompositorScro ll); 4379 layoutViewport->setScrollPosition(layoutViewportPosition, CompositorScro ll);
4354 if (DocumentLoader* documentLoader = mainFrameImpl()->frame()->loader(). documentLoader()) 4380 if (DocumentLoader* documentLoader = mainFrameImpl()->frame()->loader(). documentLoader())
4355 documentLoader->initialScrollState().wasScrolledByUser = true; 4381 documentLoader->initialScrollState().wasScrolledByUser = true;
4356 } 4382 }
4357 } 4383 }
4358 4384
4359 void WebViewImpl::recordFrameTimingEvent(FrameTimingEventType eventType, int64_t FrameId, const WebVector<WebFrameTimingEvent>& events) 4385 void WebViewImpl::recordFrameTimingEvent(FrameTimingEventType eventType, int64_t FrameId, const WebVector<WebFrameTimingEvent>& events)
4360 { 4386 {
4361 Frame* frame = m_page ? m_page->mainFrame() : 0; 4387 Frame* frame = m_page ? m_page->mainFrame() : 0;
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
4564 { 4590 {
4565 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa ctor rather than 4591 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fa ctor rather than
4566 // page's scale factor, which can be 1 in use-zoom-for-dsf mode. 4592 // page's scale factor, which can be 1 in use-zoom-for-dsf mode.
4567 if (!page()) 4593 if (!page())
4568 return 1; 4594 return 1;
4569 4595
4570 return page()->deviceScaleFactor(); 4596 return page()->deviceScaleFactor();
4571 } 4597 }
4572 4598
4573 } // namespace blink 4599 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698