Changeset 219829 in webkit


Ignore:
Timestamp:
Jul 24, 2017 11:07:31 AM (7 years ago)
Author:
Simon Fraser
Message:

Change "client" coordinates back to match scrolling coordinates
https://bugs.webkit.org/show_bug.cgi?id=174734
rdar://problem/33336930

Reviewed by Tim Horton.

Baidu.com (which uses jQuery), and various iOS apps make the assumption that getBoundingClientRect() returns a rectangle
that can be used to set or compare with the scroll position. With visual viewports, that assumption is no longer valid
when the page is zoomed, or when the keyboard has caused the visual viewport to detach from the layout viewport.

At this point the compatibility cost of shipping layout viewport-based client rects seems higher than the gain, so revert
to the shipping behavior. This reverts r216803, and will re-introduce bugs that occurred on zoomed pages on macOS,
many of which are noted in webkit.org/b/170981.

  • page/FrameView.cpp:

(WebCore::FrameView::documentToClientOffset):

LayoutTests:
Revert "client" coordinates to be in scrolling coordinates
https://bugs.webkit.org/show_bug.cgi?id=174734
rdar://problem/33336930

Reviewed by Tim Horton.

Rebaseline.

  • fast/events/ios/no-touch-events-when-stopping-momentum-scroll-in-mainframe-expected.txt:
  • fast/visual-viewport/client-coordinates-relative-to-layout-viewport-expected.txt:
  • fast/visual-viewport/client-rects-relative-to-layout-viewport-expected.txt:
  • fast/visual-viewport/zoomed-fixed-expected.txt:
  • fast/visual-viewport/zoomed-fixed-header-and-footer-expected.txt:
  • fast/zooming/client-rect-in-fixed-zoomed-expected.txt:
  • platform/ios-wk2/fast/visual-viewport/client-rects-relative-to-layout-viewport-expected.txt:
  • platform/ios-wk2/imported/w3c/web-platform-tests/cssom-view/elementFromPoint-expected.txt: Added.
  • platform/ios/fast/visual-viewport/zoomed-fixed-expected.txt:
  • platform/ios/fast/visual-viewport/zoomed-fixed-header-and-footer-expected.txt:
Location:
trunk
Files:
2 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r219825 r219829  
     12017-07-24  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Revert "client" coordinates to be in scrolling coordinates
     4        https://bugs.webkit.org/show_bug.cgi?id=174734
     5        rdar://problem/33336930
     6
     7        Reviewed by Tim Horton.
     8       
     9        Rebaseline.
     10
     11        * fast/events/ios/no-touch-events-when-stopping-momentum-scroll-in-mainframe-expected.txt:
     12        * fast/visual-viewport/client-coordinates-relative-to-layout-viewport-expected.txt:
     13        * fast/visual-viewport/client-rects-relative-to-layout-viewport-expected.txt:
     14        * fast/visual-viewport/zoomed-fixed-expected.txt:
     15        * fast/visual-viewport/zoomed-fixed-header-and-footer-expected.txt:
     16        * fast/zooming/client-rect-in-fixed-zoomed-expected.txt:
     17        * platform/ios-wk2/fast/visual-viewport/client-rects-relative-to-layout-viewport-expected.txt:
     18        * platform/ios-wk2/imported/w3c/web-platform-tests/cssom-view/elementFromPoint-expected.txt: Added.
     19        * platform/ios/fast/visual-viewport/zoomed-fixed-expected.txt:
     20        * platform/ios/fast/visual-viewport/zoomed-fixed-header-and-footer-expected.txt:
     21
    1222017-07-24  Matt Lewis  <jlewis3@apple.com>
    223
  • trunk/LayoutTests/fast/events/ios/no-touch-events-when-stopping-momentum-scroll-in-mainframe-expected.txt

    r219310 r219829  
    11PASS document.body.scrollTop became different from 0
    22PASS document.getElementById('touches').textContent is "1"
    3 PASS document.getElementById('touches').textContent is "1"
    4 PASS document.getElementById('touches').textContent is "2"
     3FAIL document.getElementById('touches').textContent should be 1. Was 2.
     4FAIL document.getElementById('touches').textContent should be 2. Was 3.
    55PASS successfullyParsed is true
    66
     
    88To manually test, swipe down to scroll in the document. The touch count should update to 1. Tap anywhere to stop scrolling while decelerating. The touch count should remain at 1. Then tap again in the document. The touch count should be 2.
    99
    10 The touch count is: 2
     10The touch count is: 3
  • trunk/LayoutTests/fast/visual-viewport/client-coordinates-relative-to-layout-viewport-expected.txt

    r216824 r219829  
    77        RenderText {#text} at (0,0) size 79x18
    88          text run at (0,0) width 79: "Got click at "
    9         RenderInline {SPAN} at (0,0) size 123x18
    10           RenderText {#text} at (78,0) size 123x18
    11             text run at (78,0) width 123: "clicked at 292, 240"
    12 layer at (278,226) size 28x28
    13   RenderBlock (positioned) {DIV} at (278,226) size 28x28 [bgcolor=#FF0000]
     9        RenderInline {SPAN} at (0,0) size 104x18
     10          RenderText {#text} at (78,0) size 104x18
     11            text run at (78,0) width 104: "clicked at 52, -6"
     12layer at (38,-20) size 28x28 backgroundClip at (0,0) size 2008x3024 clip at (0,0) size 2008x3024
     13  RenderBlock (positioned) {DIV} at (38,-20) size 28x28 [bgcolor=#FF0000]
    1414layer at (280,228) size 25x25
    1515  RenderBlock (positioned) {DIV} at (279,227) size 26x26 [bgcolor=#008000]
    1616layer at (281,229) size 22x22
    1717  RenderBlock (positioned) {DIV} at (281,229) size 22x22 [bgcolor=#FFA500]
    18 layer at (284,232) size 16x16
    19   RenderBlock (positioned) {DIV} at (284,232) size 16x16 [bgcolor=#0000FF]
     18layer at (44,-14) size 16x16 backgroundClip at (0,0) size 2008x3024 clip at (0,0) size 2008x3024
     19  RenderBlock (positioned) {DIV} at (44,-14) size 16x16 [bgcolor=#0000FF]
    2020caret: position 12 of child 0 {#text} of child 9 {P} of body
    2121scrolled to 120,123
  • trunk/LayoutTests/fast/visual-viewport/client-rects-relative-to-layout-viewport-expected.txt

    r216817 r219829  
    1414layoutViewport: 83.5, 233.5 - 785 x 585
    1515visualViewportRect: 476, 526 - 392.5 x 292.5
    16 fixed client bounds: 12, 10 - 30 x 20
    17 fixed client rect: 12, 10 - 30 x 20
    18 absolute client bounds: 36.5, -133.5 - 50 x 25
    19 absolute client rect: 36.5, -133.5 - 50 x 25
     16fixed client bounds: -856.5, -808.5 - 30 x 20
     17fixed client rect: -856.5, -808.5 - 30 x 20
     18absolute client bounds: -832, -952 - 50 x 25
     19absolute client rect: -832, -952 - 50 x 25
    2020
    2121Scrolled to 100, 776
    2222layoutViewport: 83.5, 483.5 - 785 x 585
    2323visualViewportRect: 100, 776 - 392.5 x 292.5
    24 fixed client bounds: 12, 10 - 30 x 20
    25 fixed client rect: 12, 10 - 30 x 20
    26 absolute client bounds: 36.5, -383.5 - 50 x 25
    27 absolute client rect: 36.5, -383.5 - 50 x 25
     24fixed client bounds: -104.5, -1058.5 - 30 x 20
     25fixed client rect: -104.5, -1058.5 - 30 x 20
     26absolute client bounds: -80, -1452 - 50 x 25
     27absolute client rect: -80, -1452 - 50 x 25
    2828
    2929Scrolled to 50, 300
    3030layoutViewport: 50, 300 - 785 x 585
    3131visualViewportRect: 50, 300 - 392.5 x 292.5
    32 fixed client bounds: 12, 10 - 30 x 20
    33 fixed client rect: 12, 10 - 30 x 20
    34 absolute client bounds: 70, -200 - 50 x 25
    35 absolute client rect: 70, -200 - 50 x 25
     32fixed client bounds: -38, -290 - 30 x 20
     33fixed client rect: -38, -290 - 30 x 20
     34absolute client bounds: 20, -500 - 50 x 25
     35absolute client rect: 20, -500 - 50 x 25
    3636PASS successfullyParsed is true
    3737
  • trunk/LayoutTests/fast/visual-viewport/zoomed-fixed-expected.txt

    r216803 r219829  
    1919JSON.stringify(internals.visualViewportRect()) is {"x":475,"y":525,"width":392.5,"height":292.5,"top":525,"right":867.5,"bottom":817.5,"left":475}
    2020client rect of top:
    21 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":785,"height":100,"top":0,"right":785,"bottom":100,"left":0}
     21JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-867.5,"y":-817.5,"width":785,"height":100,"top":-817.5,"right":-82.5,"bottom":-717.5,"left":-867.5}
    2222client rect of bottom:
    23 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":485,"width":785,"height":100,"top":485,"right":785,"bottom":585,"left":0}
     23JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-867.5,"y":-332.5,"width":785,"height":100,"top":-332.5,"right":-82.5,"bottom":-232.5,"left":-867.5}
    2424client rect of left:
    25 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":585,"top":0,"right":100,"bottom":585,"left":0}
     25JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-867.5,"y":-817.5,"width":100,"height":585,"top":-817.5,"right":-767.5,"bottom":-232.5,"left":-867.5}
    2626client rect of right:
    27 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":685,"y":0,"width":100,"height":585,"top":0,"right":785,"bottom":585,"left":685}
     27JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-182.5,"y":-817.5,"width":100,"height":585,"top":-817.5,"right":-82.5,"bottom":-232.5,"left":-182.5}
    2828
    2929Scrolled to 100, 776
     
    3131JSON.stringify(internals.visualViewportRect()) is {"x":100,"y":776,"width":392.5,"height":292.5,"top":776,"right":492.5,"bottom":1068.5,"left":100}
    3232client rect of top:
    33 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":785,"height":100,"top":0,"right":785,"bottom":100,"left":0}
     33JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-117.5,"y":-1068.5,"width":785,"height":100,"top":-1068.5,"right":667.5,"bottom":-968.5,"left":-117.5}
    3434client rect of bottom:
    35 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":485,"width":785,"height":100,"top":485,"right":785,"bottom":585,"left":0}
     35JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-117.5,"y":-583.5,"width":785,"height":100,"top":-583.5,"right":667.5,"bottom":-483.5,"left":-117.5}
    3636client rect of left:
    37 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":585,"top":0,"right":100,"bottom":585,"left":0}
     37JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-117.5,"y":-1068.5,"width":100,"height":585,"top":-1068.5,"right":-17.5,"bottom":-483.5,"left":-117.5}
    3838client rect of right:
    39 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":685,"y":0,"width":100,"height":585,"top":0,"right":785,"bottom":585,"left":685}
     39JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":567.5,"y":-1068.5,"width":100,"height":585,"top":-1068.5,"right":667.5,"bottom":-483.5,"left":567.5}
    4040
    4141Scrolled to 50, 300
     
    4343JSON.stringify(internals.visualViewportRect()) is {"x":50,"y":300,"width":392.5,"height":292.5,"top":300,"right":442.5,"bottom":592.5,"left":50}
    4444client rect of top:
    45 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":785,"height":100,"top":0,"right":785,"bottom":100,"left":0}
     45JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-50,"y":-300,"width":785,"height":100,"top":-300,"right":735,"bottom":-200,"left":-50}
    4646client rect of bottom:
    47 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":485,"width":785,"height":100,"top":485,"right":785,"bottom":585,"left":0}
     47JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-50,"y":185,"width":785,"height":100,"top":185,"right":735,"bottom":285,"left":-50}
    4848client rect of left:
    49 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":585,"top":0,"right":100,"bottom":585,"left":0}
     49JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-50,"y":-300,"width":100,"height":585,"top":-300,"right":50,"bottom":285,"left":-50}
    5050client rect of right:
    51 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":685,"y":0,"width":100,"height":585,"top":0,"right":785,"bottom":585,"left":685}
     51JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":635,"y":-300,"width":100,"height":585,"top":-300,"right":735,"bottom":285,"left":635}
    5252PASS successfullyParsed is true
    5353
  • trunk/LayoutTests/fast/visual-viewport/zoomed-fixed-header-and-footer-expected.txt

    r216803 r219829  
    1919JSON.stringify(internals.visualViewportRect()) is {"x":475,"y":503.5,"width":392.5,"height":292.5,"top":503.5,"right":867.5,"bottom":796,"left":475}
    2020client rect of top:
    21 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":785,"height":100,"top":0,"right":785,"bottom":100,"left":0}
     21JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-867.5,"y":-839,"width":785,"height":100,"top":-839,"right":-82.5,"bottom":-739,"left":-867.5}
    2222client rect of bottom:
    23 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":485,"width":785,"height":100,"top":485,"right":785,"bottom":585,"left":0}
     23JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-867.5,"y":-354,"width":785,"height":100,"top":-354,"right":-82.5,"bottom":-254,"left":-867.5}
    2424client rect of left:
    25 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":585,"top":0,"right":100,"bottom":585,"left":0}
     25JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-867.5,"y":-839,"width":100,"height":585,"top":-839,"right":-767.5,"bottom":-254,"left":-867.5}
    2626client rect of right:
    27 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":685,"y":0,"width":100,"height":585,"top":0,"right":785,"bottom":585,"left":685}
     27JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-182.5,"y":-839,"width":100,"height":585,"top":-839,"right":-82.5,"bottom":-254,"left":-182.5}
    2828
    2929Scrolled to 100, 776
     
    3131JSON.stringify(internals.visualViewportRect()) is {"x":100,"y":754.5,"width":392.5,"height":292.5,"top":754.5,"right":492.5,"bottom":1047,"left":100}
    3232client rect of top:
    33 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":785,"height":100,"top":0,"right":785,"bottom":100,"left":0}
     33JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-117.5,"y":-1090,"width":785,"height":100,"top":-1090,"right":667.5,"bottom":-990,"left":-117.5}
    3434client rect of bottom:
    35 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":485,"width":785,"height":100,"top":485,"right":785,"bottom":585,"left":0}
     35JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-117.5,"y":-605,"width":785,"height":100,"top":-605,"right":667.5,"bottom":-505,"left":-117.5}
    3636client rect of left:
    37 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":585,"top":0,"right":100,"bottom":585,"left":0}
     37JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-117.5,"y":-1090,"width":100,"height":585,"top":-1090,"right":-17.5,"bottom":-505,"left":-117.5}
    3838client rect of right:
    39 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":685,"y":0,"width":100,"height":585,"top":0,"right":785,"bottom":585,"left":685}
     39JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":567.5,"y":-1090,"width":100,"height":585,"top":-1090,"right":667.5,"bottom":-505,"left":567.5}
    4040
    4141Scrolled to 50, 300
     
    4343JSON.stringify(internals.visualViewportRect()) is {"x":50,"y":278.5,"width":392.5,"height":292.5,"top":278.5,"right":442.5,"bottom":571,"left":50}
    4444client rect of top:
    45 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":785,"height":100,"top":0,"right":785,"bottom":100,"left":0}
     45JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-50,"y":-321.5,"width":785,"height":100,"top":-321.5,"right":735,"bottom":-221.5,"left":-50}
    4646client rect of bottom:
    47 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":485,"width":785,"height":100,"top":485,"right":785,"bottom":585,"left":0}
     47JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-50,"y":163.5,"width":785,"height":100,"top":163.5,"right":735,"bottom":263.5,"left":-50}
    4848client rect of left:
    49 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":585,"top":0,"right":100,"bottom":585,"left":0}
     49JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-50,"y":-321.5,"width":100,"height":585,"top":-321.5,"right":50,"bottom":263.5,"left":-50}
    5050client rect of right:
    51 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":685,"y":0,"width":100,"height":585,"top":0,"right":785,"bottom":585,"left":685}
     51JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":635,"y":-321.5,"width":100,"height":585,"top":-321.5,"right":735,"bottom":263.5,"left":635}
    5252PASS successfullyParsed is true
    5353
  • trunk/LayoutTests/fast/zooming/client-rect-in-fixed-zoomed-expected.txt

    r216803 r219829  
    55
    66PASS internals.pageScaleFactor() is 2
    7 PASS JSON.stringify(clientRect) is JSON.stringify({x: 22, y: 32, width: 20, height: 10, top: 32, right: 42, bottom:42, left: 22})
     7FAIL JSON.stringify(clientRect) should be {"x":22,"y":32,"width":20,"height":10,"top":32,"right":42,"bottom":42,"left":22}. Was {"x":22,"y":-248,"width":20,"height":10,"top":-248,"right":42,"bottom":-238,"left":22}.
    88PASS successfullyParsed is true
    99
  • trunk/LayoutTests/platform/ios-wk2/fast/visual-viewport/client-rects-relative-to-layout-viewport-expected.txt

    r219668 r219829  
    1414layoutViewport: 76, 226 - 800 x 600
    1515visualViewportRect: 476, 526 - 400 x 300
    16 fixed client bounds: 12, 10 - 30 x 20
    17 fixed client rect: 12, 10 - 30 x 20
    18 absolute client bounds: 44, -126 - 50 x 25
    19 absolute client rect: 44, -126 - 50 x 25
     16fixed client bounds: -388, -290 - 30 x 20
     17fixed client rect: -388, -290 - 30 x 20
     18absolute client bounds: -356, -426 - 50 x 25
     19absolute client rect: -356, -426 - 50 x 25
    2020
    2121Scrolled to 100, 776
    2222layoutViewport: 76, 476 - 800 x 600
    2323visualViewportRect: 100, 776 - 400 x 300
    24 fixed client bounds: 12, 10 - 30 x 20
    25 fixed client rect: 12, 10 - 30 x 20
    26 absolute client bounds: 44, -376 - 50 x 25
    27 absolute client rect: 44, -376 - 50 x 25
     24fixed client bounds: -12, -290 - 30 x 20
     25fixed client rect: -12, -290 - 30 x 20
     26absolute client bounds: 20, -676 - 50 x 25
     27absolute client rect: 20, -676 - 50 x 25
    2828
    2929Scrolled to 50, 300
  • trunk/LayoutTests/platform/ios/fast/visual-viewport/zoomed-fixed-expected.txt

    r219668 r219829  
    1919JSON.stringify(internals.visualViewportRect()) is {"x":475,"y":525,"width":400,"height":300,"top":525,"right":875,"bottom":825,"left":475}
    2020client rect of top:
    21 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":800,"height":100,"top":0,"right":800,"bottom":100,"left":0}
     21JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-400,"y":-300,"width":800,"height":100,"top":-300,"right":400,"bottom":-200,"left":-400}
    2222client rect of bottom:
    23 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":500,"width":800,"height":100,"top":500,"right":800,"bottom":600,"left":0}
     23JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-400,"y":200,"width":800,"height":100,"top":200,"right":400,"bottom":300,"left":-400}
    2424client rect of left:
    25 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":600,"top":0,"right":100,"bottom":600,"left":0}
     25JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-400,"y":-300,"width":100,"height":600,"top":-300,"right":-300,"bottom":300,"left":-400}
    2626client rect of right:
    27 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":700,"y":0,"width":100,"height":600,"top":0,"right":800,"bottom":600,"left":700}
     27JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":300,"y":-300,"width":100,"height":600,"top":-300,"right":400,"bottom":300,"left":300}
    2828
    2929Scrolled to 100, 776
     
    3131JSON.stringify(internals.visualViewportRect()) is {"x":100,"y":776,"width":400,"height":300,"top":776,"right":500,"bottom":1076,"left":100}
    3232client rect of top:
    33 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":800,"height":100,"top":0,"right":800,"bottom":100,"left":0}
     33JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-25,"y":-300,"width":800,"height":100,"top":-300,"right":775,"bottom":-200,"left":-25}
    3434client rect of bottom:
    35 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":500,"width":800,"height":100,"top":500,"right":800,"bottom":600,"left":0}
     35JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-25,"y":200,"width":800,"height":100,"top":200,"right":775,"bottom":300,"left":-25}
    3636client rect of left:
    37 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":600,"top":0,"right":100,"bottom":600,"left":0}
     37JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-25,"y":-300,"width":100,"height":600,"top":-300,"right":75,"bottom":300,"left":-25}
    3838client rect of right:
    39 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":700,"y":0,"width":100,"height":600,"top":0,"right":800,"bottom":600,"left":700}
     39JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":675,"y":-300,"width":100,"height":600,"top":-300,"right":775,"bottom":300,"left":675}
    4040
    4141Scrolled to 50, 300
  • trunk/LayoutTests/platform/ios/fast/visual-viewport/zoomed-fixed-header-and-footer-expected.txt

    r219668 r219829  
    1919JSON.stringify(internals.visualViewportRect()) is {"x":475,"y":482,"width":400,"height":300,"top":482,"right":875,"bottom":782,"left":475}
    2020client rect of top:
    21 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":800,"height":100,"top":0,"right":800,"bottom":100,"left":0}
     21JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-400,"y":-343,"width":800,"height":100,"top":-343,"right":400,"bottom":-243,"left":-400}
    2222client rect of bottom:
    23 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":500,"width":800,"height":100,"top":500,"right":800,"bottom":600,"left":0}
     23JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-400,"y":157,"width":800,"height":100,"top":157,"right":400,"bottom":257,"left":-400}
    2424client rect of left:
    25 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":600,"top":0,"right":100,"bottom":600,"left":0}
     25JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-400,"y":-343,"width":100,"height":600,"top":-343,"right":-300,"bottom":257,"left":-400}
    2626client rect of right:
    27 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":700,"y":0,"width":100,"height":600,"top":0,"right":800,"bottom":600,"left":700}
     27JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":300,"y":-343,"width":100,"height":600,"top":-343,"right":400,"bottom":257,"left":300}
    2828
    2929Scrolled to 100, 776
     
    3131JSON.stringify(internals.visualViewportRect()) is {"x":100,"y":733,"width":400,"height":300,"top":733,"right":500,"bottom":1033,"left":100}
    3232client rect of top:
    33 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":800,"height":100,"top":0,"right":800,"bottom":100,"left":0}
     33JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-25,"y":-343,"width":800,"height":100,"top":-343,"right":775,"bottom":-243,"left":-25}
    3434client rect of bottom:
    35 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":500,"width":800,"height":100,"top":500,"right":800,"bottom":600,"left":0}
     35JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-25,"y":157,"width":800,"height":100,"top":157,"right":775,"bottom":257,"left":-25}
    3636client rect of left:
    37 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":600,"top":0,"right":100,"bottom":600,"left":0}
     37JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":-25,"y":-343,"width":100,"height":600,"top":-343,"right":75,"bottom":257,"left":-25}
    3838client rect of right:
    39 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":700,"y":0,"width":100,"height":600,"top":0,"right":800,"bottom":600,"left":700}
     39JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":675,"y":-343,"width":100,"height":600,"top":-343,"right":775,"bottom":257,"left":675}
    4040
    4141Scrolled to 50, 300
     
    4343JSON.stringify(internals.visualViewportRect()) is {"x":50,"y":257,"width":400,"height":300,"top":257,"right":450,"bottom":557,"left":50}
    4444client rect of top:
    45 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":800,"height":100,"top":0,"right":800,"bottom":100,"left":0}
     45JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":-43,"width":800,"height":100,"top":-43,"right":800,"bottom":57,"left":0}
    4646client rect of bottom:
    47 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":500,"width":800,"height":100,"top":500,"right":800,"bottom":600,"left":0}
     47JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":457,"width":800,"height":100,"top":457,"right":800,"bottom":557,"left":0}
    4848client rect of left:
    49 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":0,"width":100,"height":600,"top":0,"right":100,"bottom":600,"left":0}
     49JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":0,"y":-43,"width":100,"height":600,"top":-43,"right":100,"bottom":557,"left":0}
    5050client rect of right:
    51 JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":700,"y":0,"width":100,"height":600,"top":0,"right":800,"bottom":600,"left":700}
     51JSON.stringify(fixedElement.getBoundingClientRect()) is {"x":700,"y":-43,"width":100,"height":600,"top":-43,"right":800,"bottom":557,"left":700}
    5252PASS successfullyParsed is true
    5353
  • trunk/Source/WebCore/ChangeLog

    r219819 r219829  
     12017-07-24  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Change "client" coordinates back to match scrolling coordinates
     4        https://bugs.webkit.org/show_bug.cgi?id=174734
     5        rdar://problem/33336930
     6
     7        Reviewed by Tim Horton.
     8
     9        Baidu.com (which uses jQuery), and various iOS apps make the assumption that getBoundingClientRect() returns a rectangle
     10        that can be used to set or compare with the scroll position. With visual viewports, that assumption is no longer valid
     11        when the page is zoomed, or when the keyboard has caused the visual viewport to detach from the layout viewport.
     12
     13        At this point the compatibility cost of shipping layout viewport-based client rects seems higher than the gain, so revert
     14        to the shipping behavior. This reverts r216803, and will re-introduce bugs that occurred on zoomed pages on macOS,
     15        many of which are noted in webkit.org/b/170981.
     16
     17        * page/FrameView.cpp:
     18        (WebCore::FrameView::documentToClientOffset):
     19
    1202017-07-24  Zan Dobersek  <zdobersek@igalia.com>
    221
  • trunk/Source/WebCore/page/FrameView.cpp

    r219668 r219829  
    49324932FloatSize FrameView::documentToClientOffset() const
    49334933{
    4934     FloatSize clientOrigin = frame().settings().visualViewportEnabled() ? -toFloatSize(layoutViewportRect().location()) : -toFloatSize(visibleContentRect().location());
     4934    FloatSize clientOrigin = -toFloatSize(visibleContentRect().location());
    49354935
    49364936    // Layout and visual viewports are affected by page zoom, so we need to factor that out.
Note: See TracChangeset for help on using the changeset viewer.