Changeset 190487 in webkit


Ignore:
Timestamp:
Oct 2, 2015 6:56:19 AM (9 years ago)
Author:
matthew_hanson@apple.com
Message:

Merge r187593. rdar://problem/22801973

Location:
branches/safari-601-branch
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/safari-601-branch/LayoutTests/ChangeLog

    r190486 r190487  
     12015-10-02  Matthew Hanson  <matthew_hanson@apple.com>
     2
     3        Merge r187593. rdar://problem/22801973
     4
     5    2015-07-30  Simon Fraser  <simon.fraser@apple.com>
     6
     7            Selecting in an iframe can cause main page scrolling
     8            https://bugs.webkit.org/show_bug.cgi?id=147431
     9            rdar://problem/19244589
     10
     11            Reviewed by Zalan Bujtas.
     12
     13            Test that uses eventSender to select in an iframe after scrolling the
     14            main page.
     15
     16            * fast/events/autoscroll-in-iframe-expected.txt: Added.
     17            * fast/events/autoscroll-in-iframe.html: Added.
     18
    1192015-10-02  Matthew Hanson  <matthew_hanson@apple.com>
    220
  • branches/safari-601-branch/Source/WebCore/ChangeLog

    r190486 r190487  
     12015-10-02  Matthew Hanson  <matthew_hanson@apple.com>
     2
     3        Merge r187593. rdar://problem/22801973
     4
     5    2015-07-30  Simon Fraser  <simon.fraser@apple.com>
     6
     7            Selecting in an iframe can cause main page scrolling
     8            https://bugs.webkit.org/show_bug.cgi?id=147431
     9            rdar://problem/19244589
     10
     11            Reviewed by Zalan Bujtas.
     12
     13            The RenderLayer auatoscroll code walks up the RenderLayer hierarchy, crossing
     14            frame boundaries. However, as it crosses into an ancestor frame it failed to
     15            map the target rect into the coordinate space of the new frame, which caused
     16            us to scroll to an incorrect location in that parent frame.
     17
     18            Test: fast/events/autoscroll-in-iframe.html
     19
     20            * rendering/RenderLayer.cpp:
     21            (WebCore::parentLayerCrossFrame): Make the layer a reference, and pass in
     22            an optional rect. When crossing frame boundaries, map the rect from the
     23            contents of the child frame to the contents of the parent frame.
     24            (WebCore::RenderLayer::enclosingScrollableLayer): Pass optional rect.
     25            (WebCore::RenderLayer::scrollRectToVisible):
     26            (WebCore::RenderLayer::hasScrollableOrRubberbandableAncestor):
     27            * rendering/RenderLayer.h:
     28
    1292015-10-02  Matthew Hanson  <matthew_hanson@apple.com>
    230
  • branches/safari-601-branch/Source/WebCore/rendering/RenderLayer.cpp

    r187063 r190487  
    14501450}
    14511451
    1452 static RenderLayer* parentLayerCrossFrame(const RenderLayer* layer)
    1453 {
    1454     ASSERT(layer);
    1455     if (layer->parent())
    1456         return layer->parent();
    1457 
    1458     HTMLFrameOwnerElement* ownerElement = layer->renderer().document().ownerElement();
     1452static RenderLayer* parentLayerCrossFrame(const RenderLayer& layer, LayoutRect* rect = nullptr)
     1453{
     1454    if (layer.parent())
     1455        return layer.parent();
     1456
     1457    HTMLFrameOwnerElement* ownerElement = layer.renderer().document().ownerElement();
    14591458    if (!ownerElement)
    14601459        return nullptr;
     
    14641463        return nullptr;
    14651464
     1465    // Convert the rect into the coordinate space of the parent frame's document.
     1466    if (rect) {
     1467        IntRect viewRect = layer.renderer().frame().view()->convertToContainingView(enclosingIntRect(*rect));
     1468        *rect = ownerRenderer->frame().view()->viewToContents(viewRect);
     1469    }
     1470
    14661471    return ownerRenderer->enclosingLayer();
    14671472}
    14681473
    1469 RenderLayer* RenderLayer::enclosingScrollableLayer() const
    1470 {
    1471     for (RenderLayer* nextLayer = parentLayerCrossFrame(this); nextLayer; nextLayer = parentLayerCrossFrame(nextLayer)) {
     1474RenderLayer* RenderLayer::enclosingScrollableLayer(LayoutRect* rect) const
     1475{
     1476    for (RenderLayer* nextLayer = parentLayerCrossFrame(*this, rect); nextLayer; nextLayer = parentLayerCrossFrame(*nextLayer, rect)) {
    14721477        if (is<RenderBox>(nextLayer->renderer()) && downcast<RenderBox>(nextLayer->renderer()).canBeScrolledAndHasScrollableArea())
    14731478            return nextLayer;
     
    25322537   
    25332538    if (renderer().frame().eventHandler().autoscrollInProgress())
    2534         parentLayer = enclosingScrollableLayer();
     2539        parentLayer = enclosingScrollableLayer(&newRect);
    25352540
    25362541    if (parentLayer)
     
    31833188bool RenderLayer::hasScrollableOrRubberbandableAncestor()
    31843189{
    3185     for (RenderLayer* nextLayer = parentLayerCrossFrame(this); nextLayer; nextLayer = parentLayerCrossFrame(nextLayer)) {
     3190    for (RenderLayer* nextLayer = parentLayerCrossFrame(*this); nextLayer; nextLayer = parentLayerCrossFrame(*nextLayer)) {
    31863191        if (nextLayer->isScrollableOrRubberbandable())
    31873192            return true;
  • branches/safari-601-branch/Source/WebCore/rendering/RenderLayer.h

    r186392 r190487  
    405405
    406406    // Returns the nearest enclosing layer that is scrollable.
    407     RenderLayer* enclosingScrollableLayer() const;
     407    RenderLayer* enclosingScrollableLayer(LayoutRect* = nullptr) const;
    408408
    409409    // The layer relative to which clipping rects for this layer are computed.
Note: See TracChangeset for help on using the changeset viewer.