Bug 81365

Summary: [WK2] ASSERTION FAILED: m_loadState == LoadStateProvisional when receiving multipart/x-mixed-replace data
Product: WebKit Reporter: Jessie Berlin <jberlin>
Component: WebKit2Assignee: Nobody <webkit-unassigned>
Status: NEW ---    
Severity: Normal CC: andersca, ap, beidson, sam, webkit-bug-importer
Priority: P2 Keywords: InRadar, LayoutTestFailure
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
URL: http://build.webkit.org/results/Lion%20Intel%20Debug%20(WebKit2%20Tests)/r110947%20(4990)/http/tests/multipart/load-last-non-html-frame-crash-log.txt

Description Jessie Berlin 2012-03-16 10:09:51 PDT
void WebFrameProxy::didCommitLoad(const String& contentType, const PlatformCertificateInfo& certificateInfo)
{
    ASSERT(m_loadState == LoadStateProvisional);
    m_loadState = LoadStateCommitted;
    m_url = m_provisionalURL;
    m_provisionalURL = String();
    m_title = String();
    m_MIMEType = contentType;
    m_isFrameSet = false;
    m_certificateInfo = WebCertificateInfo::create(certificateInfo);
}

http://build.webkit.org/results/Lion%20Intel%20Debug%20(WebKit2%20Tests)/r110947%20(4990)/http/tests/multipart/load-last-non-html-frame-crash-log.txt
http://build.webkit.org/results/Lion%20Intel%20Debug%20(WebKit2%20Tests)/r110947%20(4990)/fast/loader/reload-zero-byte-plugin-crash-log.txt

Note: NRWT is probably not associating the correct tests with these "crashes" (see https://bugs.webkit.org/show_bug.cgi?id=71380). I have run into this locally as well, but have not been able to figure out which tests it is happening for.

Process:         WebKitTestRunner [38363]
Path:            /Volumes/VOLUME/*/WebKitTestRunner
Identifier:      WebKitTestRunner
Version:         ??? (???)
Code Type:       X86-64 (Native)
Parent Process:  Python [38336]

Date/Time:       2012-03-15 23:35:20.866 -0700
OS Version:      Mac OS X 10.7.3 (11D50)
Report Version:  9

Crashed Thread:  0  Dispatch queue: com.apple.main-thread

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000bbadbeef

VM Regions Near 0xbbadbeef:
--> 
    __TEXT                 00000001059d5000-00000001059eb000 [   88K] r-x/rwx SM=COW  /Volumes/VOLUME/*

Application Specific Information:
objc[38363]: garbage collection is OFF

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.WebKit2             	0x0000000105bfee7b WebKit::WebFrameProxy::didCommitLoad(WTF::String const&, WebKit::PlatformCertificateInfo const&) + 107 (WebFrameProxy.cpp:164)
1   com.apple.WebKit2             	0x0000000105c86a6e WebKit::WebPageProxy::didCommitLoadForFrame(unsigned long long, WTF::String const&, bool, WebKit::PlatformCertificateInfo const&, CoreIPC::ArgumentDecoder*) + 398 (WebPageProxy.cpp:1827)
2   com.apple.WebKit2             	0x0000000105cdee6e void CoreIPC::callMemberFunction<WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, WTF::String const&, bool, WebKit::PlatformCertificateInfo const&, CoreIPC::ArgumentDecoder*), unsigned long long, WTF::String, bool, WebKit::PlatformCertificateInfo>(CoreIPC::Arguments4<unsigned long long, WTF::String, bool, WebKit::PlatformCertificateInfo> const&, CoreIPC::ArgumentDecoder*, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, WTF::String const&, bool, WebKit::PlatformCertificateInfo const&, CoreIPC::ArgumentDecoder*)) + 206 (HandleMessage.h:248)
3   com.apple.WebKit2             	0x0000000105cd009e void CoreIPC::handleMessageVariadic<Messages::WebPageProxy::DidCommitLoadForFrame, WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(unsigned long long, WTF::String const&, bool, WebKit::PlatformCertificateInfo const&, CoreIPC::ArgumentDecoder*)>(CoreIPC::ArgumentDecoder*, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(unsigned long long, WTF::String const&, bool, WebKit::PlatformCertificateInfo const&, CoreIPC::ArgumentDecoder*)) + 126 (HandleMessage.h:327)
4   com.apple.WebKit2             	0x0000000105ccc7dc WebKit::WebPageProxy::didReceiveWebPageProxyMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) + 2476 (WebPageProxyMessageReceiver.cpp:231)
5   com.apple.WebKit2             	0x0000000105c8512f WebKit::WebPageProxy::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) + 271 (WebPageProxy.cpp:1615)
6   com.apple.WebKit2             	0x0000000105d206d6 WebKit::WebProcessProxy::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) + 438 (WebProcessProxy.cpp:332)
7   com.apple.WebKit2             	0x0000000105b9a855 WebKit::WebConnectionToWebProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) + 405 (WebConnectionToWebProcess.cpp:93)
8   com.apple.WebKit2             	0x0000000105b9a89d non-virtual thunk to WebKit::WebConnectionToWebProcess::didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) + 61
9   com.apple.WebKit2             	0x0000000105a35e4c CoreIPC::Connection::dispatchMessage(CoreIPC::Connection::Message<CoreIPC::ArgumentDecoder>&) + 428 (Connection.cpp:692)
10  com.apple.WebKit2             	0x0000000105a389a3 CoreIPC::Connection::dispatchMessages() + 211 (Connection.cpp:720)
11  com.apple.WebKit2             	0x0000000105a3fab0 WTF::FunctionWrapper<void (CoreIPC::Connection::*)()>::operator()(CoreIPC::Connection*) + 112 (Functional.h:173)
12  com.apple.WebKit2             	0x0000000105a3fa35 WTF::BoundFunctionImpl<WTF::FunctionWrapper<void (CoreIPC::Connection::*)()>, void ()(CoreIPC::Connection*)>::operator()() + 53 (Functional.h:373)
13  com.apple.WebCore             	0x000000010909295d WTF::Function<void ()()>::operator()() const + 141 (Functional.h:581)
14  com.apple.WebCore             	0x00000001090926e3 WebCore::RunLoop::performWork() + 147 (RunLoop.cpp:66)
15  com.apple.WebCore             	0x0000000109093b00 WebCore::RunLoop::performWork(void*) + 96 (RunLoopMac.mm:65)
16  com.apple.CoreFoundation      	0x00007fff907706e1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
17  com.apple.CoreFoundation      	0x00007fff9076ff4d __CFRunLoopDoSources0 + 253
18  com.apple.CoreFoundation      	0x00007fff90796d39 __CFRunLoopRun + 905
19  com.apple.CoreFoundation      	0x00007fff90796676 CFRunLoopRunSpecific + 230
20  com.apple.Foundation          	0x00007fff956cdf9f -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 267
21  WebKitTestRunner              	0x00000001059dfdcc WTR::TestController::platformRunUntil(bool&, double) + 204 (TestControllerMac.mm:60)
22  WebKitTestRunner              	0x00000001059db6e5 WTR::TestController::runUntil(bool&, WTR::TestController::TimeoutDuration) + 149 (TestController.cpp:564)
23  WebKitTestRunner              	0x00000001059e0b54 WTR::TestInvocation::invoke() + 1396 (TestInvocation.cpp:171)
24  WebKitTestRunner              	0x00000001059dbd68 WTR::TestController::runTest(char const*) + 1656 (TestController.cpp:514)
25  WebKitTestRunner              	0x00000001059dbe72 WTR::TestController::runTestingServerLoop() + 178 (TestController.cpp:530)
26  WebKitTestRunner              	0x00000001059da4e0 WTR::TestController::run() + 48 (TestController.cpp:538)
27  WebKitTestRunner              	0x00000001059d91a6 WTR::TestController::TestController(int, char const**) + 614 (TestController.cpp:88)
28  WebKitTestRunner              	0x00000001059d8f33 WTR::TestController::TestController(int, char const**) + 35 (TestController.cpp:89)
29  WebKitTestRunner              	0x00000001059d6e8f main + 143 (main.mm:36)
30  WebKitTestRunner              	0x00000001059d6df4 start + 52
Comment 1 Radar WebKit Bug Importer 2012-03-16 10:10:47 PDT
<rdar://problem/11063711>
Comment 2 Alexey Proskuryakov 2012-03-16 17:06:53 PDT
Can reproduce with http/tests/multipart/load-last-non-html-frame.php in both run-webkit-tests and Safari.

The issue here is that WebKit 2 doesn't implement FrameLoaderClient::revertToProvisionalState at all.
Comment 3 Alexey Proskuryakov 2012-03-19 10:38:00 PDT
Skipped in http://trac.webkit.org/changeset/111201

It's just something that needs to be properly implemented in WK2. Another test affected by this was already in WK2 skipped list, http/tests/multipart/multipart-wait-before-boundary.html.
Comment 4 Alexey Proskuryakov 2014-12-01 13:11:04 PST
FrameLoaderClient::revertToProvisionalState is still not implemented, and the assertion is still present (it is now in FrameLoadState::didCommitLoad()), but somehow, it doesn't seem to be hit on the tests.