void WebProcess::terminateIfPossible() { if (!m_pageMap.isEmpty()) return; if (m_inDidClose) return; if (DownloadManager::shared().isDownloading()) return; // Keep running forever if we're running in the same process. if (!isSeparateProcess()) return; // FIXME: the ShouldTerminate message should also send termination parameters, such as any session cookies that need to be preserved. bool shouldTerminate = false; if (m_connection->sendSync(Messages::WebProcessProxy::ShouldTerminate(), Messages::WebProcessProxy::ShouldTerminate::Reply(shouldTerminate), 0) && !shouldTerminate) return; // Actually terminate the process. #ifndef NDEBUG gcController().garbageCollectNow(); memoryCache()->setDisabled(true); #endif // Invalidate our connection. m_connection->invalidate(); m_connection = nullptr; platformTerminate(); m_runLoop->stop(); }
bool WebProcess::shouldTerminate() { // Keep running forever if we're running in the same process. if (!isSeparateProcess()) return false; ASSERT(m_pageMap.isEmpty()); ASSERT(!DownloadManager::shared().isDownloading()); // FIXME: the ShouldTerminate message should also send termination parameters, such as any session cookies that need to be preserved. bool shouldTerminate = false; if (m_connection->sendSync(Messages::WebProcessProxy::ShouldTerminate(), Messages::WebProcessProxy::ShouldTerminate::Reply(shouldTerminate), 0) && !shouldTerminate) return false; return true; }
void WebProcess::didClose(CoreIPC::Connection*) { // When running in the same process the connection will never be closed. ASSERT(isSeparateProcess()); #ifndef NDEBUG m_inDidClose = true; // Close all the live pages. Vector<RefPtr<WebPage> > pages; copyValuesToVector(m_pageMap, pages); for (size_t i = 0; i < pages.size(); ++i) pages[i]->close(); pages.clear(); gcController().garbageCollectSoon(); memoryCache()->setDisabled(true); #endif // The UI process closed this connection, shut down. m_runLoop->stop(); }
bool WebProcess::shouldTerminate() { // Keep running forever if we're running in the same process. if (!isSeparateProcess()) return false; ASSERT(m_pageMap.isEmpty()); #if ENABLE(NETWORK_PROCESS) ASSERT(m_usesNetworkProcess || !downloadManager().isDownloading()); #else ASSERT(!downloadManager().isDownloading()); #endif // FIXME: the ShouldTerminate message should also send termination parameters, such as any session cookies that need to be preserved. bool shouldTerminate = false; if (connection()->sendSync(Messages::WebProcessProxy::ShouldTerminate(), Messages::WebProcessProxy::ShouldTerminate::Reply(shouldTerminate), 0) && !shouldTerminate) return false; return true; }