diff options
author | Ben Murdoch <benm@google.com> | 2011-05-24 11:24:40 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-02 09:53:15 +0100 |
commit | 81bc750723a18f21cd17d1b173cd2a4dda9cea6e (patch) | |
tree | 7a9e5ed86ff429fd347a25153107221543909b19 /Source/WebKit2/UIProcess/WebProcessProxy.cpp | |
parent | 94088a6d336c1dd80a1e734af51e96abcbb689a7 (diff) | |
download | external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.zip external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.gz external_webkit-81bc750723a18f21cd17d1b173cd2a4dda9cea6e.tar.bz2 |
Merge WebKit at r80534: Intial merge by Git
Change-Id: Ia7a83357124c9e1cdb1debf55d9661ec0bd09a61
Diffstat (limited to 'Source/WebKit2/UIProcess/WebProcessProxy.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/WebProcessProxy.cpp | 60 |
1 files changed, 43 insertions, 17 deletions
diff --git a/Source/WebKit2/UIProcess/WebProcessProxy.cpp b/Source/WebKit2/UIProcess/WebProcessProxy.cpp index 67dc46b..42e3408 100644 --- a/Source/WebKit2/UIProcess/WebProcessProxy.cpp +++ b/Source/WebKit2/UIProcess/WebProcessProxy.cpp @@ -35,7 +35,6 @@ #include "WebContext.h" #include "WebNavigationDataStore.h" #include "WebPageProxy.h" -#include "WebProcessManager.h" #include "WebProcessMessages.h" #include "WebProcessProxyMessages.h" #include "WebProcessProxyMessageKinds.h" @@ -111,6 +110,25 @@ void WebProcessProxy::connect() } } +void WebProcessProxy::disconnect() +{ + if (m_connection) { + m_connection->invalidate(); + m_connection = nullptr; + } + + m_responsivenessTimer.stop(); + + Vector<RefPtr<WebFrameProxy> > frames; + copyValuesToVector(m_frameMap, frames); + + for (size_t i = 0, size = frames.size(); i < size; ++i) + frames[i]->disconnect(); + m_frameMap.clear(); + + m_context->disconnectProcess(this); +} + bool WebProcessProxy::sendMessage(CoreIPC::MessageID messageID, PassOwnPtr<CoreIPC::ArgumentEncoder> arguments, unsigned messageSendFlags) { // If we're waiting for the web process to launch, we need to stash away the messages so we can send them once we have @@ -230,8 +248,12 @@ void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC if (messageID.is<CoreIPC::MessageClassWebContext>() || messageID.is<CoreIPC::MessageClassWebContextLegacy>() || messageID.is<CoreIPC::MessageClassDownloadProxy>() + || messageID.is<CoreIPC::MessageClassWebApplicationCacheManagerProxy>() + || messageID.is<CoreIPC::MessageClassWebCookieManagerProxy>() || messageID.is<CoreIPC::MessageClassWebDatabaseManagerProxy>() - || messageID.is<CoreIPC::MessageClassWebGeolocationManagerProxy>()) { + || messageID.is<CoreIPC::MessageClassWebGeolocationManagerProxy>() + || messageID.is<CoreIPC::MessageClassWebKeyValueStorageManagerProxy>() + || messageID.is<CoreIPC::MessageClassWebResourceCacheManagerProxy>()) { m_context->didReceiveMessage(connection, messageID, arguments); return; } @@ -249,6 +271,9 @@ void WebProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC CoreIPC::SyncReplyMode WebProcessProxy::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply) { + if (messageID.is<CoreIPC::MessageClassWebProcessProxy>()) + return didReceiveSyncWebProcessProxyMessage(connection, messageID, arguments, reply); + #if ENABLE(PLUGIN_PROCESS) if (messageID.is<CoreIPC::MessageClassWebProcessProxyLegacy>()) { switch (messageID.get<WebProcessProxyLegacyMessage::Kind>()) { @@ -282,26 +307,14 @@ CoreIPC::SyncReplyMode WebProcessProxy::didReceiveSyncMessage(CoreIPC::Connectio void WebProcessProxy::didClose(CoreIPC::Connection*) { - // Protect ourselves, as the call to the shared WebProcessManager's processDidClose() - // below may otherwise cause us to be deleted before we can finish our work. + // Protect ourselves, as the call to disconnect() below may otherwise cause us + // to be deleted before we can finish our work. RefPtr<WebProcessProxy> protect(this); - - m_connection = nullptr; - m_responsivenessTimer.stop(); - - Vector<RefPtr<WebFrameProxy> > frames; - copyValuesToVector(m_frameMap, frames); - - for (size_t i = 0, size = frames.size(); i < size; ++i) - frames[i]->disconnect(); - m_frameMap.clear(); Vector<RefPtr<WebPageProxy> > pages; copyValuesToVector(m_pageMap, pages); - m_context->processDidClose(this); - - WebProcessManager::shared().processDidClose(this, m_context); + disconnect(); for (size_t i = 0, size = pages.size(); i < size; ++i) pages[i]->processDidCrash(); @@ -411,6 +424,19 @@ size_t WebProcessProxy::frameCountInPage(WebPageProxy* page) const return result; } +void WebProcessProxy::shouldTerminate(bool& shouldTerminate) +{ + if (!m_pageMap.isEmpty() || !m_context->shouldTerminate(this)) { + shouldTerminate = false; + return; + } + + shouldTerminate = true; + + // We know that the web process is going to terminate so disconnect it from the context. + disconnect(); +} + void WebProcessProxy::updateTextCheckerState() { if (!isValid()) |