Changeset 116832 in webkit


Ignore:
Timestamp:
May 11, 2012 7:01:51 PM (12 years ago)
Author:
jpfau@apple.com
Message:

REGRESSION (r114170): Scroll areas in nested frames improperly placed when tiled drawing is enabled
https://bugs.webkit.org/show_bug.cgi?id=86239

Reviewed by Anders Carlsson.

.:

  • ManualTests/resources/frame-textarea.html: Added.
  • ManualTests/scrollable-positioned-frame.html: Added.
  • ManualTests/scrollable-positioned-nested-frame.html: Added.

Source/WebCore:

Fixes a regression introduced in r114170 by recursively adding positions of parent frames to placement of nested frame scroll areas.

Manual tests: ManualTests/scrollable-positioned-frame.html

ManualTests/scrollable-positioned-nested-frame.html

  • page/scrolling/ScrollingCoordinator.cpp:

(WebCore::computeNonFastScrollableRegion):
(WebCore::ScrollingCoordinator::frameViewLayoutUpdated):

Location:
trunk
Files:
3 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r116800 r116832  
     12012-05-11  Jeffrey Pfau  <jpfau@apple.com>
     2
     3        REGRESSION (r114170): Scroll areas in nested frames improperly placed when tiled drawing is enabled
     4        https://bugs.webkit.org/show_bug.cgi?id=86239
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * ManualTests/resources/frame-textarea.html: Added.
     9        * ManualTests/scrollable-positioned-frame.html: Added.
     10        * ManualTests/scrollable-positioned-nested-frame.html: Added.
     11
    1122012-05-11  Kevin Ollivier  <kevino@theolliviers.com>
    213
  • trunk/Source/WebCore/ChangeLog

    r116831 r116832  
     12012-05-11  Jeffrey Pfau  <jpfau@apple.com>
     2
     3        REGRESSION (r114170): Scroll areas in nested frames improperly placed when tiled drawing is enabled
     4        https://bugs.webkit.org/show_bug.cgi?id=86239
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Fixes a regression introduced in r114170 by recursively adding positions of parent frames to placement of nested frame scroll areas.
     9
     10        Manual tests: ManualTests/scrollable-positioned-frame.html
     11                      ManualTests/scrollable-positioned-nested-frame.html
     12
     13        * page/scrolling/ScrollingCoordinator.cpp:
     14        (WebCore::computeNonFastScrollableRegion):
     15        (WebCore::ScrollingCoordinator::frameViewLayoutUpdated):
     16
    1172012-05-11  Beth Dakin  <bdakin@apple.com>
    218
  • trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp

    r116720 r116832  
    106106}
    107107
    108 static Region computeNonFastScrollableRegion(Frame* mainFrame)
     108static Region computeNonFastScrollableRegion(Frame* frame, const IntPoint& frameLocation)
    109109{
    110110    Region nonFastScrollableRegion;
    111 
    112     for (Frame* frame = mainFrame; frame; frame = frame->tree()->traverseNext()) {
    113         FrameView* frameView = frame->view();
    114         if (!frameView)
    115             continue;
    116 
    117         if (const FrameView::ScrollableAreaSet* scrollableAreas = frameView->scrollableAreas()) {
    118             for (FrameView::ScrollableAreaSet::const_iterator it = scrollableAreas->begin(), end = scrollableAreas->end(); it != end; ++it) {
    119                 ScrollableArea* scrollableArea = *it;
    120                 nonFastScrollableRegion.unite(scrollableArea->scrollableAreaBoundingBox());
    121             }
    122         }
    123 
    124         if (const HashSet<RefPtr<Widget> >* children = frameView->children()) {
    125             for (HashSet<RefPtr<Widget> >::const_iterator it = children->begin(), end = children->end(); it != end; ++it) {
    126                 if (!(*it)->isPluginViewBase())
    127                     continue;
    128                
    129                 PluginViewBase* pluginViewBase = static_cast<PluginViewBase*>((*it).get());
    130                 if (pluginViewBase->wantsWheelEvents())
    131                     nonFastScrollableRegion.unite(pluginViewBase->frameRect());
    132             }
     111    FrameView* frameView = frame->view();
     112    if (!frameView)
     113        return nonFastScrollableRegion;
     114
     115    IntPoint offset = frameLocation;
     116    offset.moveBy(frameView->frameRect().location());
     117
     118    if (const FrameView::ScrollableAreaSet* scrollableAreas = frameView->scrollableAreas()) {
     119        for (FrameView::ScrollableAreaSet::const_iterator it = scrollableAreas->begin(), end = scrollableAreas->end(); it != end; ++it) {
     120            ScrollableArea* scrollableArea = *it;
     121            IntRect box = scrollableArea->scrollableAreaBoundingBox();
     122            box.moveBy(offset);
     123            nonFastScrollableRegion.unite(box);
    133124        }
    134125    }
     126
     127    if (const HashSet<RefPtr<Widget> >* children = frameView->children()) {
     128        for (HashSet<RefPtr<Widget> >::const_iterator it = children->begin(), end = children->end(); it != end; ++it) {
     129            if (!(*it)->isPluginViewBase())
     130                continue;
     131
     132            PluginViewBase* pluginViewBase = static_cast<PluginViewBase*>((*it).get());
     133            if (pluginViewBase->wantsWheelEvents())
     134                nonFastScrollableRegion.unite(pluginViewBase->frameRect());
     135        }
     136    }
     137
     138    FrameTree* tree = frame->tree();
     139    for (Frame* subFrame = tree->firstChild(); subFrame; subFrame = subFrame->tree()->nextSibling())
     140        nonFastScrollableRegion.unite(computeNonFastScrollableRegion(subFrame, offset));
    135141
    136142    return nonFastScrollableRegion;
     
    145151    // all scrollable areas, such as subframes, overflow divs and list boxes. We need to do this even if the
    146152    // frame view whose layout was updated is not the main frame.
    147     Region nonFastScrollableRegion = computeNonFastScrollableRegion(m_page->mainFrame());
     153    Region nonFastScrollableRegion = computeNonFastScrollableRegion(m_page->mainFrame(), IntPoint());
    148154    setNonFastScrollableRegion(nonFastScrollableRegion);
    149155
Note: See TracChangeset for help on using the changeset viewer.