Bug 69200

Summary: Assertions when !renderer->needsLayout()
Product: WebKit Reporter: Adam Barth <abarth>
Component: Layout and RenderingAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: linchong_jx, mitz, sam
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   

Description Adam Barth 2011-09-30 18:09:21 PDT
This seem to be cropping up randomly:

http/tests/inspector/change-iframe-src.html
media/video-src-change.html
svg/custom/recursive-mask.svg
media/video-replaces-poster.html

ASSERTION FAILED: !renderer->needsLayout()
third_party/WebKit/Source/WebCore/rendering/RenderView.cpp(147) : virtual void WebCore::RenderView::layout()
[14890:14890:14267711790715:ERROR:process_util_posix.cc(134)] Received signal 11
	base::debug::StackTrace::StackTrace() [0x6f8d8a]
	base::(anonymous namespace)::StackDumpSignalHandler() [0x6b6281]
	0x2b81e4a7baf0
	WebCore::RenderView::layout() [0x163e157]
	WebCore::FrameView::layout() [0x1248ac1]
	WebCore::FrameView::visibleContentsResized() [0x124b1e9]
	WebCore::ScrollView::updateScrollbars() [0xe0963d]
	WebCore::ScrollView::setContentsSize() [0xe08643]
	WebCore::FrameView::setContentsSize() [0x1246d43]
	WebCore::FrameView::adjustViewSize() [0x1246fa3]
	WebCore::FrameView::layout() [0x1248b73]
	WebCore::Document::implicitClose() [0xc1fb49]
	WebCore::FrameLoader::checkCallImplicitClose() [0x11a055b]
	WebCore::FrameLoader::checkCompleted() [0x11a032e]
	WebCore::FrameLoader::finishedParsing() [0x11a0087]
	WebCore::Document::finishedParsing() [0xc2841c]
	WebCore::XMLDocumentParser::end() [0x1341af0]
	WebCore::XMLDocumentParser::finish() [0x1341b2a]
	WebCore::DocumentWriter::endIfNotLoadingMainResource() [0x11960a3]
	WebCore::DocumentWriter::end() [0x1195fab]
	WebCore::DocumentLoader::finishedLoading() [0x11874f1]
	WebCore::FrameLoader::finishedLoading() [0x11a7029]
	WebCore::MainResourceLoader::didFinishLoading() [0x11bbc1a]
	WebCore::ResourceLoader::didFinishLoading() [0x11ce8a9]
	WebCore::ResourceHandleInternal::didFinishLoading() [0x4f4648]
	webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest() [0x1a4ae9c]
	(anonymous namespace)::RequestProxy::NotifyCompletedRequest() [0x1b06915]
	DispatchToMethod<>() [0x1b0cffd]
	RunnableMethod<>::Run() [0x1b0c430]
	base::subtle::TaskClosureAdapter::Run() [0x6d5a87]
	base::internal::Invoker1<>::DoInvoke() [0x6947d2]
	base::Callback<>::Run() [0x676a85]
	MessageLoop::RunTask() [0x691375]
	MessageLoop::DeferOrRunPendingTask() [0x69147d]
	MessageLoop::DoWork() [0x691c93]
	base::MessagePumpGlib::HandleDispatch() [0x6ea61d]
	(anonymous namespace)::WorkSourceDispatch() [0x6e9b6f]
	0x2b81deec58c2
	0x2b81deec9748
	0x2b81deec98fc
	base::MessagePumpGtk::RunOnce() [0x6ebe85]
	base::MessagePumpGlib::RunWithDispatcher() [0x6ea2d0]
	base::MessagePumpGlib::Run() [0x6ea6fa]
	MessageLoop::RunInternal() [0x691169]
	MessageLoop::RunHandler() [0x69101c]
	MessageLoop::Run() [0x690a37]
	webkit_support::RunMessageLoop() [0x60c96c]
	TestShell::waitTestFinished() [0x461b95]
	TestShell::runFileTest() [0x45a8b8]
	runTest() [0x42ee78]
	main [0x42f88b]
	0x2b81e4a66c4d
	0x41dea9
Comment 1 Adam Barth 2011-09-30 18:10:47 PDT
Windows too:

ASSERTION FAILED: !renderer->needsLayout()
Backtrace:
	WebCore::RenderView::layout [0x011B588B+795] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\rendering\renderview.cpp:147)
	WebCore::FrameView::layout [0x0132966B+2347] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\page\frameview.cpp:1096)
	WebCore::Document::implicitClose [0x01AFB814+852] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\dom\document.cpp:2235)
	WebCore::FrameLoader::checkCallImplicitClose [0x013D89B4+132] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\loader\frameloader.cpp:797)
	WebCore::FrameLoader::checkCompleted [0x013D8742+242] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\loader\frameloader.cpp:746)
	WebCore::FrameLoader::finishedParsing [0x013D84A8+152] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\loader\frameloader.cpp:680)
	WebCore::Document::finishedParsing [0x01B0487F+351] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\dom\document.cpp:4295)
	WebCore::HTMLTreeBuilder::finished [0x01AD3D44+100] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\html\parser\htmltreebuilder.cpp:2826)
	WebCore::HTMLDocumentParser::end [0x01AA45C3+131] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\html\parser\htmldocumentparser.cpp:382)
	WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd [0x01AA4696+182] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\html\parser\htmldocumentparser.cpp:391)
	WebCore::HTMLDocumentParser::prepareToStopParsing [0x01AA33EC+188] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\html\parser\htmldocumentparser.cpp:154)
	WebCore::HTMLDocumentParser::attemptToEnd [0x01AA4709+57] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\html\parser\htmldocumentparser.cpp:402)
	WebCore::HTMLDocumentParser::finish [0x01AA4863+51] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\html\parser\htmldocumentparser.cpp:430)
	WebCore::DocumentWriter::endIfNotLoadingMainResource [0x014A3625+229] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\loader\documentwriter.cpp:235)
	WebCore::DocumentWriter::end [0x014A3527+39] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\loader\documentwriter.cpp:215)
	WebCore::DocumentLoader::finishedLoading [0x014804A4+84] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\loader\documentloader.cpp:286)
	WebCore::FrameLoader::finishedLoading [0x013DE702+82] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\loader\frameloader.cpp:2085)
	WebCore::MainResourceLoader::didFinishLoading [0x0176B8B0+304] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\loader\mainresourceloader.cpp:477)
	WebCore::ResourceLoader::didFinishLoading [0x017645F1+97] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webcore\loader\resourceloader.cpp:451)
	WebCore::ResourceHandleInternal::didFinishLoading [0x00A7DBC0+144] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\source\webkit\chromium\src\resourcehandle.cpp:158)
	webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest [0x00B7B505+533] (e:\b\build\slave\webkit_win__dbg__1_\build\src\webkit\glue\weburlloader_impl.cc:629)
	`anonymous namespace'::RequestProxy::NotifyCompletedRequest [0x00AFFD49+57] (e:\b\build\slave\webkit_win__dbg__1_\build\src\webkit\tools\test_shell\simple_resource_loader_bridge.cc:289)
	 [0x00B08211+33] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\tuple.h:560)
	 [0x00B067B5+53] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\task.h:348)
	base::subtle::TaskClosureAdapter::Run [0x022BE672+50] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\task.cc:56)
	base::internal::Invoker1<0,base::internal::InvokerStorage1<void (__thiscall base::subtle::TaskClosureAdapter::*)(void),base::subtle::TaskClosureAdapter *>,void (__thiscall base::subtle::TaskClosureAdapter::*)(void)>::DoInvoke [0x022B8EED+45] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\bind_internal.h:595)
	base::Callback<void __cdecl(void)>::Run [0x008BA37F+47] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\callback.h:269)
	MessageLoop::RunTask [0x022AF595+293] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\message_loop.cc:478)
	MessageLoop::DeferOrRunPendingTask [0x022AF6D3+51] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\message_loop.cc:495)
	MessageLoop::DoWork [0x022B00AD+221] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\message_loop.cc:682)
	base::MessagePumpForUI::DoRunLoop [0x0231B574+84] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\message_pump_win.cc:203)
	base::MessagePumpWin::RunWithDispatcher [0x0231ADF2+130] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\message_pump_win.cc:51)
	base::MessagePumpWin::Run [0x0231B05C+28] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\message_pump_win.h:80)
	MessageLoop::RunInternal [0x022AF2E7+247] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\message_loop.cc:443)
	MessageLoop::RunHandler [0x022AF0BE+46] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\message_loop.cc:417)
	MessageLoop::Run [0x022AE9CA+58] (e:\b\build\slave\webkit_win__dbg__1_\build\src\base\message_loop.cc:341)
	webkit_support::RunMessageLoop [0x0090058F+15] (e:\b\build\slave\webkit_win__dbg__1_\build\src\webkit\support\webkit_support.cc:401)
	TestShell::waitTestFinished [0x0042CEBD+141] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\tools\dumprendertree\chromium\testshellwin.cpp:106)
	TestShell::runFileTest [0x0044796F+479] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\tools\dumprendertree\chromium\testshell.cpp:233)
	runTest [0x0041BB3D+733] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\tools\dumprendertree\chromium\dumprendertree.cpp:125)
	main [0x0041B336+2262] (e:\b\build\slave\webkit_win__dbg__1_\build\src\third_party\webkit\tools\dumprendertree\chromium\dumprendertree.cpp:256)
	__tmainCRTStartup [0x00AA5857+279] (f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c:266)
	mainCRTStartup [0x00AA572F+15] (f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c:182)
	RegisterWaitForInputIdle [0x7C817077+73]
None
Comment 2 Adam Barth 2011-09-30 18:12:20 PDT
Seems to have been caused but this patch:
http://trac.webkit.org/changeset/96427
Comment 3 Adam Barth 2011-09-30 18:12:55 PDT
Adding the authors of the patch that is triggering the assertions.
Comment 4 Adam Barth 2011-09-30 18:16:29 PDT
I've removed the assert in http://trac.webkit.org/changeset/96445.  If this assert is catching real bugs, we should fix those bugs and then add the assert back.
Comment 5 Adam Barth 2011-09-30 18:16:49 PDT
I would comment on the original bug, but it's only in rdar.
Comment 6 Adam Barth 2011-09-30 18:31:22 PDT
fast/flexbox/021.html seems to be a popular test to trigger the assert.
Comment 7 mitz 2011-09-30 18:47:16 PDT
I am terribly sorry. This was not meant to be checked in, and not part of the patch as reviewed. Thanks for reverting the change!
Comment 8 Longinc 2012-10-17 20:20:20 PDT
ASSERT FAILED:
     ASSERT(!renderer()->needsLayout());
1   0x1129a33 WebCore::HTMLFormControlElement::isFocusable() const
2   0x1142445 WebCore::HTMLInputElement::isMouseFocusable() const
3   0x114c3a1 WebCore::HTMLLabelElement::defaultEventHandler(WebCore::Event*)
4   0xfc46b9 WebCore::EventDispatcher::dispatchEvent(WTF::PassRefPtr<WebCore::Event>)
5   0x13e331b WebCore::MouseEventDispatchMediator::dispatchEvent(WebCore::EventDispatcher*) const
6   0xfc3465 WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WTF::PassRefPtr<WebCore::EventDispatchMediator>)
7   0x1400273 WebCore::Node::dispatchMouseEvent(WebCore::PlatformMouseEvent const&, WTF::AtomicString const&, int, WebCore::Node*)
8   0xfcd55b WebCore::EventHandler::dispatchMouseEvent(WTF::AtomicString const&, WebCore::Node*, bool, int, WebCore::PlatformMouseEvent const&, bool)
9   0xfcee75 WebCore::EventHandler::handleMouseReleaseEvent(WebCore::PlatformMouseEvent const&)
Comment 9 Longinc 2012-10-17 20:22:00 PDT
(In reply to comment #8)
> ASSERT FAILED:
>      ASSERT(!renderer()->needsLayout());
> 1   0x1129a33 WebCore::HTMLFormControlElement::isFocusable() const
> 2   0x1142445 WebCore::HTMLInputElement::isMouseFocusable() const
> 3   0x114c3a1 WebCore::HTMLLabelElement::defaultEventHandler(WebCore::Event*)
> 4   0xfc46b9 WebCore::EventDispatcher::dispatchEvent(WTF::PassRefPtr<WebCore::Event>)
> 5   0x13e331b WebCore::MouseEventDispatchMediator::dispatchEvent(WebCore::EventDispatcher*) const
> 6   0xfc3465 WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WTF::PassRefPtr<WebCore::EventDispatchMediator>)
> 7   0x1400273 WebCore::Node::dispatchMouseEvent(WebCore::PlatformMouseEvent const&, WTF::AtomicString const&, int, WebCore::Node*)
> 8   0xfcd55b WebCore::EventHandler::dispatchMouseEvent(WTF::AtomicString const&, WebCore::Node*, bool, int, WebCore::PlatformMouseEvent const&, bool)
> 9   0xfcee75 WebCore::EventHandler::handleMouseReleaseEvent(WebCore::PlatformMouseEvent const&)

SVN:112327