Changeset 219594 in webkit


Ignore:
Timestamp:
Jul 17, 2017 6:45:59 PM (7 years ago)
Author:
timothy_horton@apple.com
Message:

Page using safe area constant properties jumps to correct layout after resize
https://bugs.webkit.org/show_bug.cgi?id=174598
<rdar://problem/33364275>

Reviewed by Simon Fraser.

Source/WebKit:

Test: fast/events/ios/rotation/safe-area-insets-during-safari-type-rotation.html

  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView _beginAnimatedResizeWithUpdates:]):

  • UIProcess/WebPageProxy.h:
  • UIProcess/ios/WebPageProxyIOS.mm:

(WebKit::WebPageProxy::dynamicViewportSizeUpdate):

  • WebProcess/WebPage/WebPage.h:
  • WebProcess/WebPage/WebPage.messages.in:
  • WebProcess/WebPage/ios/WebPageIOS.mm:

(WebKit::WebPage::dynamicViewportSizeUpdate):
Plumb unobscured safe area insets through in the dynamicViewportSizeUpdate,
like we do in VisibleContentRectUpdate (once again sad that these aren't
more similar), so that it will be correct in the during-rotation snapshot,
instead of only becoming correct in the first visible content rect update
post-rotation.

LayoutTests:

  • fast/events/ios/rotation/safe-area-insets-during-safari-type-rotation-expected.txt: Added.
  • fast/events/ios/rotation/safe-area-insets-during-safari-type-rotation.html: Added.

Add a test making sure that dynamic-viewport-update-based rotation
updates safe area insets when needed.

Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r219586 r219594  
     12017-07-17  Timothy Horton  <timothy_horton@apple.com>
     2
     3        Page using safe area constant properties jumps to correct layout after resize
     4        https://bugs.webkit.org/show_bug.cgi?id=174598
     5        <rdar://problem/33364275>
     6
     7        Reviewed by Simon Fraser.
     8
     9        * fast/events/ios/rotation/safe-area-insets-during-safari-type-rotation-expected.txt: Added.
     10        * fast/events/ios/rotation/safe-area-insets-during-safari-type-rotation.html: Added.
     11        Add a test making sure that dynamic-viewport-update-based rotation
     12        updates safe area insets when needed.
     13
    1142017-07-17  Matt Lewis  <jlewis3@apple.com>
    215       
  • trunk/Source/WebKit/ChangeLog

    r219588 r219594  
     12017-07-17  Timothy Horton  <timothy_horton@apple.com>
     2
     3        Page using safe area constant properties jumps to correct layout after resize
     4        https://bugs.webkit.org/show_bug.cgi?id=174598
     5        <rdar://problem/33364275>
     6
     7        Reviewed by Simon Fraser.
     8
     9        Test: fast/events/ios/rotation/safe-area-insets-during-safari-type-rotation.html
     10
     11        * UIProcess/API/Cocoa/WKWebView.mm:
     12        (-[WKWebView _beginAnimatedResizeWithUpdates:]):
     13        * UIProcess/WebPageProxy.h:
     14        * UIProcess/ios/WebPageProxyIOS.mm:
     15        (WebKit::WebPageProxy::dynamicViewportSizeUpdate):
     16        * WebProcess/WebPage/WebPage.h:
     17        * WebProcess/WebPage/WebPage.messages.in:
     18        * WebProcess/WebPage/ios/WebPageIOS.mm:
     19        (WebKit::WebPage::dynamicViewportSizeUpdate):
     20        Plumb unobscured safe area insets through in the dynamicViewportSizeUpdate,
     21        like we do in VisibleContentRectUpdate (once again sad that these aren't
     22        more similar), so that it will be correct in the during-rotation snapshot,
     23        instead of only becoming correct in the first visible content rect update
     24        post-rotation.
     25
    1262017-07-17  Chris Dumez  <cdumez@apple.com>
    227
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r219526 r219594  
    48604860    CGRect unobscuredRectInContentCoordinates = [self convertRect:futureUnobscuredRectInSelfCoordinates toView:_contentView.get()];
    48614861
    4862     _page->dynamicViewportSizeUpdate(newMinimumLayoutSize, newMaximumUnobscuredSize, visibleRectInContentCoordinates, unobscuredRectInContentCoordinates, futureUnobscuredRectInSelfCoordinates, targetScale, newOrientation);
     4862    UIEdgeInsets unobscuredSafeAreaInsets = [self _computedUnobscuredSafeAreaInset];
     4863    WebCore::FloatBoxExtent unobscuredSafeAreaInsetsExtent(unobscuredSafeAreaInsets.top, unobscuredSafeAreaInsets.right, unobscuredSafeAreaInsets.bottom, unobscuredSafeAreaInsets.left);
     4864
     4865    _page->dynamicViewportSizeUpdate(newMinimumLayoutSize, newMaximumUnobscuredSize, visibleRectInContentCoordinates, unobscuredRectInContentCoordinates, futureUnobscuredRectInSelfCoordinates, unobscuredSafeAreaInsetsExtent, targetScale, newOrientation);
    48634866    if (WebKit::DrawingAreaProxy* drawingArea = _page->drawingArea())
    48644867        drawingArea->setSize(WebCore::IntSize(newBounds.size), WebCore::IntSize(), WebCore::IntSize());
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r219340 r219594  
    500500    void overflowScrollDidEndScroll();
    501501
    502     void dynamicViewportSizeUpdate(const WebCore::FloatSize& minimumLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, const WebCore::FloatRect& targetUnobscuredRectInScrollViewCoordinates, double targetScale, int32_t deviceOrientation);
     502    void dynamicViewportSizeUpdate(const WebCore::FloatSize& minimumLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, const WebCore::FloatRect& targetUnobscuredRectInScrollViewCoordinates, const WebCore::FloatBoxExtent& unobscuredSafeAreaInsets, double targetScale, int32_t deviceOrientation);
    503503    void synchronizeDynamicViewportUpdate();
    504504
  • trunk/Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm

    r219340 r219594  
    288288}
    289289
    290 void WebPageProxy::dynamicViewportSizeUpdate(const FloatSize& minimumLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const FloatRect& targetExposedContentRect, const FloatRect& targetUnobscuredRect, const FloatRect& targetUnobscuredRectInScrollViewCoordinates, double targetScale, int32_t deviceOrientation)
     290void WebPageProxy::dynamicViewportSizeUpdate(const FloatSize& minimumLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const FloatRect& targetExposedContentRect, const FloatRect& targetUnobscuredRect, const FloatRect& targetUnobscuredRectInScrollViewCoordinates, const WebCore::FloatBoxExtent& unobscuredSafeAreaInsets, double targetScale, int32_t deviceOrientation)
    291291{
    292292    if (!isValid())
     
    297297    m_dynamicViewportSizeUpdateWaitingForTarget = true;
    298298    m_dynamicViewportSizeUpdateWaitingForLayerTreeCommit = true;
    299     m_process->send(Messages::WebPage::DynamicViewportSizeUpdate(minimumLayoutSize, maximumUnobscuredSize, targetExposedContentRect, targetUnobscuredRect, targetUnobscuredRectInScrollViewCoordinates, targetScale, deviceOrientation, ++m_currentDynamicViewportSizeUpdateID), m_pageID);
     299    m_process->send(Messages::WebPage::DynamicViewportSizeUpdate(minimumLayoutSize, maximumUnobscuredSize, targetExposedContentRect, targetUnobscuredRect, targetUnobscuredRectInScrollViewCoordinates, unobscuredSafeAreaInsets, targetScale, deviceOrientation, ++m_currentDynamicViewportSizeUpdateID), m_pageID);
    300300}
    301301
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.h

    r219106 r219594  
    826826    void setMaximumUnobscuredSize(const WebCore::FloatSize&);
    827827    void setDeviceOrientation(int32_t);
    828     void dynamicViewportSizeUpdate(const WebCore::FloatSize& minimumLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, const WebCore::FloatRect& targetUnobscuredRectInScrollViewCoordinates, double scale, int32_t deviceOrientation, uint64_t dynamicViewportSizeUpdateID);
     828    void dynamicViewportSizeUpdate(const WebCore::FloatSize& minimumLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const WebCore::FloatRect& targetExposedContentRect, const WebCore::FloatRect& targetUnobscuredRect, const WebCore::FloatRect& targetUnobscuredRectInScrollViewCoordinates, const WebCore::FloatBoxExtent& targetUnobscuredSafeAreaInsets, double scale, int32_t deviceOrientation, uint64_t dynamicViewportSizeUpdateID);
    829829    void synchronizeDynamicViewportUpdate(double& newTargetScale, WebCore::FloatPoint& newScrollPosition, uint64_t& nextValidLayerTreeTransactionID);
    830830    std::optional<float> scaleFromUIProcess(const VisibleContentRectUpdateInfo&) const;
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in

    r219106 r219594  
    4444    SetMaximumUnobscuredSize(WebCore::FloatSize size)
    4545    SetDeviceOrientation(int32_t deviceOrientation)
    46     DynamicViewportSizeUpdate(WebCore::FloatSize minimumLayoutSize, WebCore::FloatSize maximumUnobscuredSize, WebCore::FloatRect targetExposedContentRect, WebCore::FloatRect targetUnobscuredRect, WebCore::FloatRect targetUnobscuredRectInScrollViewCoordinates, double scale, int32_t deviceOrientation, uint64_t dynamicViewportSizeUpdateID)
     46    DynamicViewportSizeUpdate(WebCore::FloatSize minimumLayoutSize, WebCore::FloatSize maximumUnobscuredSize, WebCore::FloatRect targetExposedContentRect, WebCore::FloatRect targetUnobscuredRect, WebCore::FloatRect targetUnobscuredRectInScrollViewCoordinates, WebCore::BoxExtent<float> targetUnobscuredSafeAreaInsets, double scale, int32_t deviceOrientation, uint64_t dynamicViewportSizeUpdateID)
    4747    SynchronizeDynamicViewportUpdate() -> (double newTargetScale, WebCore::FloatPoint newScrollPosition, uint64_t nextValidLayerTreeTransactionID)
    4848
  • trunk/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm

    r219055 r219594  
    28572857}
    28582858
    2859 void WebPage::dynamicViewportSizeUpdate(const FloatSize& minimumLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const FloatRect& targetExposedContentRect, const FloatRect& targetUnobscuredRect, const WebCore::FloatRect& targetUnobscuredRectInScrollViewCoordinates, double targetScale, int32_t deviceOrientation, uint64_t dynamicViewportSizeUpdateID)
     2859void WebPage::dynamicViewportSizeUpdate(const FloatSize& minimumLayoutSize, const WebCore::FloatSize& maximumUnobscuredSize, const FloatRect& targetExposedContentRect, const FloatRect& targetUnobscuredRect, const WebCore::FloatRect& targetUnobscuredRectInScrollViewCoordinates, const WebCore::FloatBoxExtent& targetUnobscuredSafeAreaInsets, double targetScale, int32_t deviceOrientation, uint64_t dynamicViewportSizeUpdateID)
    28602860{
    28612861    SetForScope<bool> dynamicSizeUpdateGuard(m_inDynamicSizeUpdate, true);
     
    29012901
    29022902    setMaximumUnobscuredSize(maximumUnobscuredSize);
     2903    m_page->setUnobscuredSafeAreaInsets(targetUnobscuredSafeAreaInsets);
    29032904
    29042905    frameView.updateLayoutAndStyleIfNeededRecursive();
Note: See TracChangeset for help on using the changeset viewer.