void TestInvocation::dumpWebProcessUnresponsiveness() { const char* errorMessageToStderr = 0; #if PLATFORM(MAC) char buffer[64]; pid_t pid = WKPageGetProcessIdentifier(TestController::shared().mainWebView()->page()); sprintf(buffer, "#PROCESS UNRESPONSIVE - WebProcess (pid %ld)\n", static_cast<long>(pid)); errorMessageToStderr = buffer; #else errorMessageToStderr = "#PROCESS UNRESPONSIVE - WebProcess"; #endif dump(m_errorMessage.c_str(), errorMessageToStderr, true); }
void TestController::processDidCrash() { // This function can be called multiple times when crash logs are being saved on Windows, so // ensure we only print the crashed message once. if (!m_didPrintWebProcessCrashedMessage) { #if PLATFORM(MAC) pid_t pid = WKPageGetProcessIdentifier(m_mainWebView->page()); fprintf(stderr, "#CRASHED - WebProcess (pid %ld)\n", static_cast<long>(pid)); #else fputs("#CRASHED - WebProcess\n", stderr); #endif fflush(stderr); m_didPrintWebProcessCrashedMessage = true; } if (m_shouldExitWhenWebProcessCrashes) exit(1); }
void TestInvocation::invoke() { sizeWebViewForCurrentTest(m_pathOrURL.c_str()); WKRetainPtr<WKStringRef> messageName = adoptWK(WKStringCreateWithUTF8CString("BeginTest")); WKRetainPtr<WKMutableDictionaryRef> beginTestMessageBody = adoptWK(WKMutableDictionaryCreate()); WKRetainPtr<WKStringRef> dumpFrameLoadDelegatesKey = adoptWK(WKStringCreateWithUTF8CString("DumpFrameLoadDelegates")); WKRetainPtr<WKBooleanRef> dumpFrameLoadDelegatesValue = adoptWK(WKBooleanCreate(shouldLogFrameLoadDelegates(m_pathOrURL.c_str()))); WKDictionaryAddItem(beginTestMessageBody.get(), dumpFrameLoadDelegatesKey.get(), dumpFrameLoadDelegatesValue.get()); WKRetainPtr<WKStringRef> dumpPixelsKey = adoptWK(WKStringCreateWithUTF8CString("DumpPixels")); WKRetainPtr<WKBooleanRef> dumpPixelsValue = adoptWK(WKBooleanCreate(m_dumpPixels)); WKDictionaryAddItem(beginTestMessageBody.get(), dumpPixelsKey.get(), dumpPixelsValue.get()); WKRetainPtr<WKStringRef> useWaitToDumpWatchdogTimerKey = adoptWK(WKStringCreateWithUTF8CString("UseWaitToDumpWatchdogTimer")); WKRetainPtr<WKBooleanRef> useWaitToDumpWatchdogTimerValue = adoptWK(WKBooleanCreate(TestController::shared().useWaitToDumpWatchdogTimer())); WKDictionaryAddItem(beginTestMessageBody.get(), useWaitToDumpWatchdogTimerKey.get(), useWaitToDumpWatchdogTimerValue.get()); WKContextPostMessageToInjectedBundle(TestController::shared().context(), messageName.get(), beginTestMessageBody.get()); const char* errorMessage = 0; TestController::shared().runUntil(m_gotInitialResponse, TestController::ShortTimeout); if (!m_gotInitialResponse) { errorMessage = "Timed out waiting for initial response from web process\n"; goto end; } if (m_error) { errorMessage = "FAIL\n"; goto end; } #if ENABLE(INSPECTOR) if (shouldOpenWebInspector(m_pathOrURL.c_str())) WKInspectorShow(WKPageGetInspector(TestController::shared().mainWebView()->page())); #endif // ENABLE(INSPECTOR) WKPageLoadURL(TestController::shared().mainWebView()->page(), m_url.get()); TestController::shared().runUntil(m_gotFinalMessage, TestController::shared().useWaitToDumpWatchdogTimer() ? TestController::LongTimeout : TestController::NoTimeout); if (!m_gotFinalMessage) { errorMessage = "Timed out waiting for final message from web process\n"; goto end; } if (m_error) { errorMessage = "FAIL\n"; goto end; } end: #if ENABLE(INSPECTOR) if (m_gotInitialResponse) WKInspectorClose(WKPageGetInspector(TestController::shared().mainWebView()->page())); #endif // ENABLE(INSPECTOR) bool resetDone = TestController::shared().resetStateToConsistentValues(); // We expect resetting to not fail if there was no error or timeout. ASSERT(resetDone || errorMessage); const char* errorMessageToStderr = 0; #if PLATFORM(MAC) char buffer[64]; if (!resetDone) { pid_t pid = WKPageGetProcessIdentifier(TestController::shared().mainWebView()->page()); sprintf(buffer, "#PROCESS UNRESPONSIVE - WebProcess (pid %ld)\n", static_cast<long>(pid)); errorMessageToStderr = buffer; } #else if (!resetDone) errorMessageToStderr = "#PROCESS UNRESPONSIVE - WebProcess"; #endif if (errorMessage) dump(errorMessage, errorMessageToStderr, true); }