Changeset 286350 in webkit


Ignore:
Timestamp:
Nov 30, 2021 10:32:24 PM (8 months ago)
Author:
Devin Rousso
Message:

[css-values-4] Dynamic dv* viewport units should not respect the page scale
https://bugs.webkit.org/show_bug.cgi?id=233291

Reviewed by Simon Fraser.

Source/WebCore:

According to the spec (<https://drafts.csswg.org/css-values-4/#viewport-relative-lengths>):

The viewport-percentage lengths are relative to the size of the initial containing block.

As such, we should really be using the layout viewport, not the visual viewport.

Tests: CSSViewportUnits.AllSame

CSSViewportUnits.EmptyUnobscuredSizeOverrides
CSSViewportUnits.SameUnobscuredSizeOverrides
CSSViewportUnits.DifferentUnobscuredSizeOverrides

  • page/FrameView.h:
  • page/FrameView.cpp:

(WebCore::FrameView::availableContentSizeChanged):
(WebCore::FrameView::layoutOrVisualViewportChanged):
(WebCore::FrameView::unobscuredContentSizeChanged):
(WebCore::FrameView::sizeForCSSDynamicViewportUnits() const):
Make sure to notify elements using CSS viewport units of changes to the layout viewport.

Tools:

  • TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.html:
  • TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm:

(evaluateForNumber):
(dimensionOfElement): Added.
(widthOfElementWithID): Added.
(heightOfElementWithID): ADded.
(viewportUnitLength): Added.
(TEST.CSSViewportUnits.AllSame):
(TEST.CSSViewportUnits.EmptyUnobscuredSizeOverrides):
(TEST.CSSViewportUnits.SameUnobscuredSizeOverrides):
(TEST.CSSViewportUnits.DifferentUnobscuredSizeOverrides):
(getElementHeight): Deleted.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r286349 r286350  
     12021-11-30  Devin Rousso  <drousso@apple.com>
     2
     3        [css-values-4] Dynamic `dv*` viewport units should not respect the page scale
     4        https://bugs.webkit.org/show_bug.cgi?id=233291
     5
     6        Reviewed by Simon Fraser.
     7
     8        According to the spec (<https://drafts.csswg.org/css-values-4/#viewport-relative-lengths>):
     9        > The viewport-percentage lengths are relative to the size of the initial containing block.
     10        As such, we should really be using the layout viewport, not the visual viewport.
     11
     12        Tests: CSSViewportUnits.AllSame
     13               CSSViewportUnits.EmptyUnobscuredSizeOverrides
     14               CSSViewportUnits.SameUnobscuredSizeOverrides
     15               CSSViewportUnits.DifferentUnobscuredSizeOverrides
     16
     17        * page/FrameView.h:
     18        * page/FrameView.cpp:
     19        (WebCore::FrameView::availableContentSizeChanged):
     20        (WebCore::FrameView::layoutOrVisualViewportChanged):
     21        (WebCore::FrameView::unobscuredContentSizeChanged):
     22        (WebCore::FrameView::sizeForCSSDynamicViewportUnits() const):
     23        Make sure to notify elements using CSS viewport units of changes to the layout viewport.
     24
    1252021-11-30  Chris Dumez  <cdumez@apple.com>
    226
  • trunk/Source/WebCore/page/FrameView.cpp

    r286119 r286350  
    27932793        // way of handling potential recursive layouts when the viewport is resized to accomodate
    27942794        // the content but the content always overflows the viewport. See webkit.org/b/165781.
    2795         if (!(layoutContext().layoutPhase() == FrameViewLayoutContext::LayoutPhase::InViewSizeAdjust && useFixedLayout()))
     2795        if (layoutContext().layoutPhase() == FrameViewLayoutContext::LayoutPhase::InViewSizeAdjust)
    27962796            document->updateViewportUnitsOnResize();
    27972797    }
     
    28972897void FrameView::layoutOrVisualViewportChanged()
    28982898{
    2899     if (!frame().settings().visualViewportAPIEnabled())
    2900         return;
    2901 
    2902     if (auto* window = frame().window())
    2903         window->visualViewport().update();
    2904 
    2905     if (auto scrollingCoordinator = this->scrollingCoordinator())
    2906         scrollingCoordinator->frameViewVisualViewportChanged(*this);
     2899    if (frame().settings().visualViewportAPIEnabled()) {
     2900        if (auto* window = frame().window())
     2901            window->visualViewport().update();
     2902
     2903        if (auto scrollingCoordinator = this->scrollingCoordinator())
     2904            scrollingCoordinator->frameViewVisualViewportChanged(*this);
     2905    }
     2906
     2907    auto layoutViewportSize = layoutViewportRect().size();
     2908    if (layoutViewportSize != m_lastLayoutViewportSize) {
     2909        if (auto* document = frame().document())
     2910            document->updateViewportUnitsOnResize();
     2911
     2912        m_lastLayoutViewportSize = layoutViewportSize;
     2913    }
    29072914}
    29082915
     
    29122919    updateTiledBackingAdaptiveSizing();
    29132920#endif
    2914 
    2915     if (auto* document = frame().document())
    2916         document->updateViewportUnitsOnResize();
    29172921}
    29182922
     
    56755679FloatSize FrameView::sizeForCSSDynamicViewportUnits() const
    56765680{
    5677     return unobscuredContentRectIncludingScrollbars().size();
     5681    return rectForFixedPositionLayout().size();
    56785682}
    56795683
  • trunk/Source/WebCore/page/FrameView.h

    r286119 r286350  
    923923
    924924    LayoutPoint m_layoutViewportOrigin;
     925    LayoutSize m_lastLayoutViewportSize;
    925926    std::optional<LayoutRect> m_layoutViewportOverrideRect;
    926927    std::optional<LayoutRect> m_visualViewportOverrideRect; // Used when the iOS keyboard is showing.
  • trunk/Tools/ChangeLog

    r286329 r286350  
     12021-11-30  Devin Rousso  <drousso@apple.com>
     2
     3        [css-values-4] Dynamic `dv*` viewport units should not respect the page scale
     4        https://bugs.webkit.org/show_bug.cgi?id=233291
     5
     6        Reviewed by Simon Fraser.
     7
     8        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.html:
     9        * TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm:
     10        (evaluateForNumber):
     11        (dimensionOfElement): Added.
     12        (widthOfElementWithID): Added.
     13        (heightOfElementWithID): ADded.
     14        (viewportUnitLength): Added.
     15        (TEST.CSSViewportUnits.AllSame):
     16        (TEST.CSSViewportUnits.EmptyUnobscuredSizeOverrides):
     17        (TEST.CSSViewportUnits.SameUnobscuredSizeOverrides):
     18        (TEST.CSSViewportUnits.DifferentUnobscuredSizeOverrides):
     19        (getElementHeight): Deleted.
     20
    1212021-11-30  BJ Burg  <bburg@apple.com>
    222
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.html

    r284628 r286350  
    1414</head>
    1515<body>
     16    <div id="fixed" style="position: fixed; width: 100%; height: 100%;"></div>
     17
    1618    <div id="vw" style="height: 100vw;"></div>
    1719    <div id="vh" style="height: 100vh;"></div>
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/CSSViewportUnits.mm

    r285345 r286350  
    3131#import <wtf/RetainPtr.h>
    3232
    33 static double evaluateForNumber(WKWebView *webView, NSString *script)
     33static double evaluateForNumber(RetainPtr<TestWKWebView>& webView, NSString *script)
    3434{
    3535    return [(NSNumber *)[webView objectByEvaluatingJavaScript:script] doubleValue];
    3636}
    3737
    38 static double getElementHeight(WKWebView *webView, NSString *elementID)
    39 {
    40     return evaluateForNumber(webView, [NSString stringWithFormat:@"document.getElementById('%@').getBoundingClientRect().height", elementID]);
     38static double dimensionOfElement(RetainPtr<TestWKWebView>& webView, NSString *element, NSString *dimension)
     39{
     40    return evaluateForNumber(webView, [NSString stringWithFormat:@"%@.getBoundingClientRect().%@", element, dimension]);
     41}
     42
     43static double widthOfElementWithID(RetainPtr<TestWKWebView>& webView, NSString *elementID)
     44{
     45    return dimensionOfElement(webView, [NSString stringWithFormat:@"document.getElementById('%@')", elementID], @"width");
     46}
     47
     48static double heightOfElementWithID(RetainPtr<TestWKWebView>& webView, NSString *elementID)
     49{
     50    return dimensionOfElement(webView, [NSString stringWithFormat:@"document.getElementById('%@')", elementID], @"height");
     51}
     52
     53static double viewportUnitLength(RetainPtr<TestWKWebView>& webView, NSString *viewportUnit)
     54{
     55    return heightOfElementWithID(webView, viewportUnit);
    4156}
    4257
     
    4560    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 500)]);
    4661    [webView synchronouslyLoadTestPageNamed:@"CSSViewportUnits"];
    47 
    48     EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"vw"));
    49     EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"vh"));
    50     EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"vmin"));
    51     EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"vmax"));
    52 
    53     EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"svw"));
    54     EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"svh"));
    55     EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"svmin"));
    56     EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"svmax"));
    57 
    58     EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"lvw"));
    59     EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"lvh"));
    60     EXPECT_FLOAT_EQ(320, getElementHeight(webView.get(), @"lvmin"));
    61     EXPECT_FLOAT_EQ(500, getElementHeight(webView.get(), @"lvmax"));
    62 
    63     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
    64     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
    65     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
    66     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
     62    [webView waitForNextPresentationUpdate];
     63
     64    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"vw"));
     65    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"vh"));
     66    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"vmin"));
     67    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"vmax"));
     68
     69    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"svw"));
     70    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"svh"));
     71    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"svmin"));
     72    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"svmax"));
     73
     74    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"lvw"));
     75    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"lvh"));
     76    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"lvmin"));
     77    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"lvmax"));
     78
     79    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvw"));
     80    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvh"));
     81    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmin"));
     82    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmax"));
     83
     84#if PLATFORM(IOS_FAMILY)
     85    [webView scrollView].zoomScale = 2;
     86#elif PLATFORM(MAC)
     87    [webView setAllowsMagnification:YES];
     88    [webView setMagnification:2];
     89#endif
     90    [webView waitForNextPresentationUpdate];
     91
     92    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"vw"));
     93    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"vh"));
     94    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"vmin"));
     95    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"vmax"));
     96
     97    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"svw"));
     98    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"svh"));
     99    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"svmin"));
     100    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"svmax"));
     101
     102    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"lvw"));
     103    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"lvh"));
     104    EXPECT_FLOAT_EQ(320, viewportUnitLength(webView, @"lvmin"));
     105    EXPECT_FLOAT_EQ(500, viewportUnitLength(webView, @"lvmax"));
     106
     107    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvw"));
     108    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvh"));
     109    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmin"));
     110    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmax"));
    67111}
    68112
     
    75119                              maximumUnobscuredSizeOverride:CGSizeZero];
    76120    [webView synchronouslyLoadTestPageNamed:@"CSSViewportUnits"];
    77 
    78     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"vw"));
    79     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"vh"));
    80     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"vmin"));
    81     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"vmax"));
    82 
    83     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svw"));
    84     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svh"));
    85     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svmin"));
    86     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svmax"));
    87 
    88     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"lvw"));
    89     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"lvh"));
    90     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"lvmin"));
    91     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"lvmax"));
    92 
    93     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
    94     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
    95     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
    96     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
     121    [webView waitForNextPresentationUpdate];
     122
     123    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"vw"));
     124    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"vh"));
     125    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"vmin"));
     126    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"vmax"));
     127
     128    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svw"));
     129    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svh"));
     130    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svmin"));
     131    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svmax"));
     132
     133    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"lvw"));
     134    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"lvh"));
     135    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"lvmin"));
     136    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"lvmax"));
     137
     138    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvw"));
     139    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvh"));
     140    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmin"));
     141    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmax"));
     142
     143    [webView scrollView].zoomScale = 2;
     144    [webView waitForNextPresentationUpdate];
     145
     146    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"vw"));
     147    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"vh"));
     148    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"vmin"));
     149    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"vmax"));
     150
     151    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svw"));
     152    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svh"));
     153    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svmin"));
     154    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svmax"));
     155
     156    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"lvw"));
     157    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"lvh"));
     158    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"lvmin"));
     159    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"lvmax"));
     160
     161    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvw"));
     162    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvh"));
     163    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmin"));
     164    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmax"));
    97165}
    98166
     
    103171                              maximumUnobscuredSizeOverride:CGSizeMake(10.5, 20.5)];
    104172    [webView synchronouslyLoadTestPageNamed:@"CSSViewportUnits"];
    105 
    106     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"vw"));
    107     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"vh"));
    108     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"vmin"));
    109     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"vmax"));
    110 
    111     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svw"));
    112     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svh"));
    113     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svmin"));
    114     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svmax"));
    115 
    116     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"lvw"));
    117     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"lvh"));
    118     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"lvmin"));
    119     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"lvmax"));
    120 
    121     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
    122     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
    123     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
    124     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
     173    [webView waitForNextPresentationUpdate];
     174
     175    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"vw"));
     176    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"vh"));
     177    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"vmin"));
     178    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"vmax"));
     179
     180    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svw"));
     181    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svh"));
     182    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svmin"));
     183    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svmax"));
     184
     185    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"lvw"));
     186    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"lvh"));
     187    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"lvmin"));
     188    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"lvmax"));
     189
     190    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvw"));
     191    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvh"));
     192    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmin"));
     193    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmax"));
     194
     195    [webView scrollView].zoomScale = 2;
     196    [webView waitForNextPresentationUpdate];
     197
     198    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"vw"));
     199    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"vh"));
     200    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"vmin"));
     201    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"vmax"));
     202
     203    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svw"));
     204    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svh"));
     205    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svmin"));
     206    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svmax"));
     207
     208    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"lvw"));
     209    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"lvh"));
     210    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"lvmin"));
     211    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"lvmax"));
     212
     213    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvw"));
     214    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvh"));
     215    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmin"));
     216    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmax"));
    125217}
    126218
     
    131223                              maximumUnobscuredSizeOverride:CGSizeMake(30.5, 40.5)];
    132224    [webView synchronouslyLoadTestPageNamed:@"CSSViewportUnits"];
    133 
    134     EXPECT_FLOAT_EQ(30.5, getElementHeight(webView.get(), @"vw"));
    135     EXPECT_FLOAT_EQ(40.5, getElementHeight(webView.get(), @"vh"));
    136     EXPECT_FLOAT_EQ(30.5, getElementHeight(webView.get(), @"vmin"));
    137     EXPECT_FLOAT_EQ(40.5, getElementHeight(webView.get(), @"vmax"));
    138 
    139     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svw"));
    140     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svh"));
    141     EXPECT_FLOAT_EQ(10.5, getElementHeight(webView.get(), @"svmin"));
    142     EXPECT_FLOAT_EQ(20.5, getElementHeight(webView.get(), @"svmax"));
    143 
    144     EXPECT_FLOAT_EQ(30.5, getElementHeight(webView.get(), @"lvw"));
    145     EXPECT_FLOAT_EQ(40.5, getElementHeight(webView.get(), @"lvh"));
    146     EXPECT_FLOAT_EQ(30.5, getElementHeight(webView.get(), @"lvmin"));
    147     EXPECT_FLOAT_EQ(40.5, getElementHeight(webView.get(), @"lvmax"));
    148 
    149     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvw"));
    150     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvh"));
    151     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerWidth"), getElementHeight(webView.get(), @"dvmin"));
    152     EXPECT_FLOAT_EQ(evaluateForNumber(webView.get(), @"window.innerHeight"), getElementHeight(webView.get(), @"dvmax"));
     225    [webView waitForNextPresentationUpdate];
     226
     227    EXPECT_FLOAT_EQ(30.5, viewportUnitLength(webView, @"vw"));
     228    EXPECT_FLOAT_EQ(40.5, viewportUnitLength(webView, @"vh"));
     229    EXPECT_FLOAT_EQ(30.5, viewportUnitLength(webView, @"vmin"));
     230    EXPECT_FLOAT_EQ(40.5, viewportUnitLength(webView, @"vmax"));
     231
     232    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svw"));
     233    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svh"));
     234    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svmin"));
     235    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svmax"));
     236
     237    EXPECT_FLOAT_EQ(30.5, viewportUnitLength(webView, @"lvw"));
     238    EXPECT_FLOAT_EQ(40.5, viewportUnitLength(webView, @"lvh"));
     239    EXPECT_FLOAT_EQ(30.5, viewportUnitLength(webView, @"lvmin"));
     240    EXPECT_FLOAT_EQ(40.5, viewportUnitLength(webView, @"lvmax"));
     241
     242    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvw"));
     243    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvh"));
     244    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmin"));
     245    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmax"));
     246
     247    [webView scrollView].zoomScale = 2;
     248    [webView waitForNextPresentationUpdate];
     249
     250    EXPECT_FLOAT_EQ(30.5, viewportUnitLength(webView, @"vw"));
     251    EXPECT_FLOAT_EQ(40.5, viewportUnitLength(webView, @"vh"));
     252    EXPECT_FLOAT_EQ(30.5, viewportUnitLength(webView, @"vmin"));
     253    EXPECT_FLOAT_EQ(40.5, viewportUnitLength(webView, @"vmax"));
     254
     255    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svw"));
     256    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svh"));
     257    EXPECT_FLOAT_EQ(10.5, viewportUnitLength(webView, @"svmin"));
     258    EXPECT_FLOAT_EQ(20.5, viewportUnitLength(webView, @"svmax"));
     259
     260    EXPECT_FLOAT_EQ(30.5, viewportUnitLength(webView, @"lvw"));
     261    EXPECT_FLOAT_EQ(40.5, viewportUnitLength(webView, @"lvh"));
     262    EXPECT_FLOAT_EQ(30.5, viewportUnitLength(webView, @"lvmin"));
     263    EXPECT_FLOAT_EQ(40.5, viewportUnitLength(webView, @"lvmax"));
     264
     265    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvw"));
     266    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvh"));
     267    EXPECT_FLOAT_EQ(widthOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmin"));
     268    EXPECT_FLOAT_EQ(heightOfElementWithID(webView, @"fixed"), viewportUnitLength(webView, @"dvmax"));
    153269}
    154270
Note: See TracChangeset for help on using the changeset viewer.