[Webkit-unassigned] [Bug 89371] New: [BlackBerry] Overscroll can get reset while interacting with a page, due to style recalculations and scroll position clamping
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Mon Jun 18 12:30:37 PDT 2012
https://bugs.webkit.org/show_bug.cgi?id=89371
Summary: [BlackBerry] Overscroll can get reset while
interacting with a page, due to style recalculations
and scroll position clamping
Product: WebKit
Version: 528+ (Nightly build)
Platform: Unspecified
OS/Version: Unspecified
Status: NEW
Severity: Normal
Priority: P2
Component: WebKit BlackBerry
AssignedTo: webkit-unassigned at lists.webkit.org
ReportedBy: tonikitoo at webkit.org
CC: tonikitoo at webkit.org
>From PRZilla:
(Issue found while investigating PR #152333).
while user is scrolling, an webpage can have style recalculations or relayout triggered that at some point can clamp the scroll position to 0,0. See the stack trace below:
(gdb) bt
#0 ScrollHandlerUserInterfaceThread::updateScrollPosition (this=0x18e230, pos=...) at
#1 0x782b4a3e in WebPageClientImpl::scrollChanged (this=0x1923b8, scrollPoint=...) at
#2 0x78147484 in BlackBerry::WebKit::WebPagePrivate::notifyTransformedScrollChanged
#3 0x78171f68 in BlackBerry::WebKit::BackingStoreClient::checkOriginOfCurrentScrollOperation
#4 0x7816480a in WebCore::ChromeClientBlackBerry::scroll (this=0x13fd10, delta=..., scrollViewRect=..., clipRect=...)
#5 0x7a78b290 in WebCore::Chrome::scroll (this=<optimized out>, scrollDelta=..., rectToScroll=..., clipRect=...)
#6 0x7a7ac8d0 in WebCore::FrameView::scrollContentsFastPath (this=0x323c90, scrollDelta=..., rectToScroll=..., clipRect=...)
#7 0x7a7eba72 in WebCore::ScrollView::scrollContents (this=0x323c90, scrollDelta=...) at
#8 0x7a7ebb34 in WebCore::ScrollView::scrollTo (this=0x323c90, newOffset=...)at
#9 0x7a7a8dae in WebCore::FrameView::scrollTo (this=<optimized out>, newOffset=...) at
#10 0x7a7e966e in WebCore::ScrollView::setScrollOffset (this=0x323c90, offset=...) at
#11 0x7a7e77cc in WebCore::ScrollableArea::scrollPositionChanged(this=0x323cb4, position=...) at
#12 0x7a7e7048 in WebCore::ScrollAnimator::notifyPositionChanged
#13 0x7a7e700c in WebCore::ScrollAnimator::scrollToOffsetWithoutAnimation(this=<optimized out>, offset=...)
#14 0x7a7e7588 in WebCore::ScrollableArea::scrollToOffsetWithoutAnimation(this=<optimized out>, offset=...)
#15 0x7a7eaa20 in updateScrollbars (desiredOffset=..., this=0x323c90) at
#16 WebCore::ScrollView::updateScrollbars (this=0x323c90, desiredOffset=...) at
#17 0x7a7ebc8a in setContentsSize (newSize=..., this=0x323c90) at
#18 WebCore::ScrollView::setContentsSize (this=0x323c90, newSize=...) at
#19 0x7a7accd8 in WebCore::FrameView::setContentsSize (this=0x323c90, size=...) at
#20 0x7a7a85f4 in WebCore::FrameView::adjustViewSize (this=0x323c90) at
#21 0x7a7abd48 in layout (allowSubtree=<optimized out>, this=0x323c90) at
#22 WebCore::FrameView::layout (this=0x323c90, allowSubtree=<optimized out>) at
#23 0x7a59d66e in WebCore::Document::updateLayoutIgnorePendingStylesheets
#24 0x7a5ada92 in WebCore::Element::offsetHeight (this=<optimized out>) at
#25 0x7ab226b6 in WebCore::jsElementOffsetHeight (exec=<optimized out>, slotBase=...)
#26 0x796dca76 in getValue (propertyName=..., exec=0x700520, this=0x2ea570) at
#27 JSC::JSValue::get (this=<optimized out>, exec=0x700520, propertyName=..., slot=...) at
#28 0x796dd662 in JSC::JITStubThunked_op_get_by_id_generic (args=<optimized out>) at
In frame #15, we can in some cases clamp the scroll position to the mainframe
contents boundary, removing suddenly the overscroll.
This happens because our scroll operation looks like this:
void WebPage::setScrollPosition(const Platform::IntPoint& point)
{
...
d->m_backingStoreClient->setIsClientGeneratedScroll(true);
d->m_mainFrame->view()->setConstrainsScrollingToContentEdge(false);
d->setScrollPosition(d->mapFromTransformed(point));
d->m_mainFrame->view()->setConstrainsScrollingToContentEdge(true);
d->m_backingStoreClient->setIsClientGeneratedScroll(false);
}
We wrap ::setScrollPosition calls with ::setConstrainsScrollingToContentEdge(false|true) calls. If webcore relayouts while setConstrainsScrollingToContentEdge is true, the scroll position will get clamped.
--
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
More information about the webkit-unassigned
mailing list