Bug 29350 - Assertion failure from invalidating scrollbars before they are placed
Summary: Assertion failure from invalidating scrollbars before they are placed
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebCore Misc. (show other bugs)
Version: 528+ (Nightly build)
Hardware: PC Windows 7
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-09-17 15:35 PDT by Brian Weinstein
Modified: 2010-06-10 19:04 PDT (History)
2 users (show)

See Also:


Attachments
Remove Assertions (1.99 KB, patch)
2009-09-17 15:59 PDT, Brian Weinstein
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Brian Weinstein 2009-09-17 15:35:16 PDT
When running the layout tests in fast/frames on a Windows debug build, an assertion is hit trying to paint a rect that isn't in our client rect. This is caused by us trying to repaint a scrollbar that hasn't been laid out yet.

Backtrace:

 	WebKit_debug.dll!WebView::addToDirtyRegion(const WebCore::IntRect & dirtyRect={...})  Line 729 + 0x3a bytes	C++
 	WebKit_debug.dll!WebView::repaint(const WebCore::IntRect & windowRect={...}, bool contentChanged=true, bool immediate=false, bool repaintContentOnly=false)  Line 681	C++
 	WebKit_debug.dll!WebChromeClient::repaint(const WebCore::IntRect & windowRect={...}, bool contentChanged=true, bool immediate=false, bool repaintContentOnly=false)  Line 451	C++
 	WebKit_debug.dll!WebCore::Chrome::repaint(const WebCore::IntRect & windowRect={...}, bool contentChanged=true, bool immediate=false, bool repaintContentOnly=false)  Line 72 + 0x28 bytes	C++
 	WebKit_debug.dll!WebCore::FrameView::invalidateRect(const WebCore::IntRect & rect={...})  Line 278 + 0x32 bytes	C++
 	WebKit_debug.dll!WebCore::FrameView::invalidateScrollbarRect(WebCore::Scrollbar * scrollbar=0x038c8110, const WebCore::IntRect & rect={...})  Line 1360 + 0x17 bytes	C++
 	WebKit_debug.dll!WebCore::Scrollbar::invalidateRect(const WebCore::IntRect & rect={...})  Line 449 + 0x1d bytes	C++
 	WebKit_debug.dll!WebCore::Widget::invalidate()  Line 140 + 0x3a bytes	C++
>	WebKit_debug.dll!WebCore::ScrollView::setScrollbarsSuppressed(bool suppressed=false, bool repaintOnUnsuppress=true)  Line 630	C++
 	WebKit_debug.dll!WebCore::FrameView::layout(bool allowSubtree=true)  Line 607	C++
 	WebKit_debug.dll!WebCore::FrameView::layoutTimerFired(WebCore::Timer<WebCore::FrameView> * __formal=0x038b86f8)  Line 970	C++
 	WebKit_debug.dll!WebCore::Timer<WebCore::FrameView>::fired()  Line 98 + 0x29 bytes	C++
 	WebKit_debug.dll!WebCore::ThreadTimers::sharedTimerFiredInternal()  Line 112 + 0xf bytes	C++
 	WebKit_debug.dll!WebCore::ThreadTimers::sharedTimerFired()  Line 91	C++
 	WebKit_debug.dll!WebCore::TimerWindowWndProc(HWND__ * hWnd=0x004605f2, unsigned int message=0x0000c14f, unsigned int wParam=0x00000000, long lParam=0x00000000)  Line 102 + 0x8 bytes	C++
 	user32.dll!_InternalCallWinProc@20()  + 0x23 bytes	
 	user32.dll!_UserCallWinProcCheckWow@32()  + 0xb7 bytes	
 	user32.dll!_DispatchMessageWorker@8()  + 0xed bytes	
 	user32.dll!_DispatchMessageW@4()  + 0xf bytes	
 	DumpRenderTree_debug.exe!runTest(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & testPathOrURL="C:\cygwin\home\bweinstein\OpenSource\LayoutTests\fast\frames\frame-limit.html")  Line 871 + 0xf bytes	C++
 	DumpRenderTree_debug.exe!main(int argc=0x00000002, char * * argv=0x00a0c570)  Line 1204 + 0x28 bytes	C++
 	DumpRenderTree_debug.exe!__tmainCRTStartup()  Line 597 + 0x19 bytes	C
 	DumpRenderTree_debug.exe!mainCRTStartup()  Line 414	C
 	kernel32.dll!@BaseThreadInitThunk@12()  + 0x12 bytes	
 	ntdll.dll!___RtlUserThreadStart@8()  + 0x27 bytes	
 	ntdll.dll!__RtlUserThreadStart@8()  + 0x1b bytes


Dirty and Client Rect:
dirtyRect
{m_location={...} m_size={...} }
    m_location: {m_x=-15 m_y=0 }
    m_size: {m_width=15 m_height=0 }

clientRect
{top=0 bottom=600 left=0 right=800}
    left: 0
    top: 0
    right: 800
    bottom: 600
Comment 1 Brian Weinstein 2009-09-17 15:37:43 PDT
The function calling the issues is m_verticalScrollbar->invalidate(), and this is happening on Windows.
Comment 2 Brian Weinstein 2009-09-17 15:59:03 PDT
Created attachment 39731 [details]
Remove Assertions
Comment 3 Adam Roben (:aroben) 2009-09-17 16:00:17 PDT
Comment on attachment 39731 [details]
Remove Assertions

r=me, but we should leave this bug open to track fixing the bad invalidation.
Comment 4 Brian Weinstein 2009-09-17 16:05:06 PDT
Path to remove assertions committed in http://trac.webkit.org/changeset/48496.