diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2013-09-13 12:51:20 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-19 20:50:05 +0200 |
commit | d441d6f39bb846989d95bcf5caf387b42414718d (patch) | |
tree | e367e64a75991c554930278175d403c072de6bb8 /Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp | |
parent | 0060b2994c07842f4c59de64b5e3e430525c4b90 (diff) | |
download | qtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz |
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit.
Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp')
-rw-r--r-- | Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp b/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp index 64bfc2b7d..642db156a 100644 --- a/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp +++ b/Source/WebKit2/WebProcess/Plugins/PluginProcessConnectionManager.cpp @@ -31,6 +31,7 @@ #include "ArgumentDecoder.h" #include "ArgumentEncoder.h" #include "PluginProcessConnection.h" +#include "PluginProcessConnectionManagerMessages.h" #include "WebCoreArgumentCoders.h" #include "WebProcess.h" #include "WebProcessProxyMessages.h" @@ -41,7 +42,13 @@ namespace WebKit { +PassRefPtr<PluginProcessConnectionManager> PluginProcessConnectionManager::create() +{ + return adoptRef(new PluginProcessConnectionManager); +} + PluginProcessConnectionManager::PluginProcessConnectionManager() + : m_queue(WorkQueue::create("com.apple.WebKit.PluginProcessConnectionManager")) { } @@ -49,17 +56,21 @@ PluginProcessConnectionManager::~PluginProcessConnectionManager() { } -PluginProcessConnection* PluginProcessConnectionManager::getPluginProcessConnection(const String& pluginPath, PluginProcess::Type processType) +void PluginProcessConnectionManager::initializeConnection(CoreIPC::Connection* connection) +{ + connection->addWorkQueueMessageReceiver(Messages::PluginProcessConnectionManager::messageReceiverName(), m_queue.get(), this); +} + +PluginProcessConnection* PluginProcessConnectionManager::getPluginProcessConnection(uint64_t pluginProcessToken) { for (size_t i = 0; i < m_pluginProcessConnections.size(); ++i) { - RefPtr<PluginProcessConnection>& pluginProcessConnection = m_pluginProcessConnections[i]; - if (pluginProcessConnection->pluginPath() == pluginPath && pluginProcessConnection->processType() == processType) - return pluginProcessConnection.get(); + if (m_pluginProcessConnections[i]->pluginProcessToken() == pluginProcessToken) + return m_pluginProcessConnections[i].get(); } CoreIPC::Attachment encodedConnectionIdentifier; bool supportsAsynchronousInitialization; - if (!WebProcess::shared().connection()->sendSync(Messages::WebProcessProxy::GetPluginProcessConnection(pluginPath, processType), + if (!WebProcess::shared().parentProcessConnection()->sendSync(Messages::WebProcessProxy::GetPluginProcessConnection(pluginProcessToken), Messages::WebProcessProxy::GetPluginProcessConnection::Reply(encodedConnectionIdentifier, supportsAsynchronousInitialization), 0)) return 0; @@ -73,14 +84,14 @@ PluginProcessConnection* PluginProcessConnectionManager::getPluginProcessConnect return 0; #endif - RefPtr<PluginProcessConnection> pluginProcessConnection = PluginProcessConnection::create(this, pluginPath, processType, connectionIdentifier, supportsAsynchronousInitialization); + RefPtr<PluginProcessConnection> pluginProcessConnection = PluginProcessConnection::create(this, pluginProcessToken, connectionIdentifier, supportsAsynchronousInitialization); m_pluginProcessConnections.append(pluginProcessConnection); { - MutexLocker locker(m_pathsAndConnectionsMutex); - ASSERT(!m_pathsAndConnections.contains(std::make_pair(pluginProcessConnection->pluginPath(), processType))); + MutexLocker locker(m_tokensAndConnectionsMutex); + ASSERT(!m_tokensAndConnections.contains(pluginProcessToken)); - m_pathsAndConnections.set(std::make_pair(pluginPath, processType), pluginProcessConnection->connection()); + m_tokensAndConnections.set(pluginProcessToken, pluginProcessConnection->connection()); } return pluginProcessConnection.get(); @@ -92,19 +103,19 @@ void PluginProcessConnectionManager::removePluginProcessConnection(PluginProcess ASSERT(vectorIndex != notFound); { - MutexLocker locker(m_pathsAndConnectionsMutex); - ASSERT(m_pathsAndConnections.contains(std::make_pair(pluginProcessConnection->pluginPath(), pluginProcessConnection->processType()))); + MutexLocker locker(m_tokensAndConnectionsMutex); + ASSERT(m_tokensAndConnections.contains(pluginProcessConnection->pluginProcessToken())); - m_pathsAndConnections.remove(std::make_pair(pluginProcessConnection->pluginPath(), pluginProcessConnection->processType())); + m_tokensAndConnections.remove(pluginProcessConnection->pluginProcessToken()); } m_pluginProcessConnections.remove(vectorIndex); } -void PluginProcessConnectionManager::pluginProcessCrashed(const String& pluginPath, PluginProcess::Type processType) +void PluginProcessConnectionManager::pluginProcessCrashed(uint64_t pluginProcessToken) { - MutexLocker locker(m_pathsAndConnectionsMutex); - CoreIPC::Connection* connection = m_pathsAndConnections.get(std::make_pair(pluginPath, processType)).get(); + MutexLocker locker(m_tokensAndConnectionsMutex); + CoreIPC::Connection* connection = m_tokensAndConnections.get(pluginProcessToken); // It's OK for connection to be null here; it will happen if this web process doesn't know // anything about the plug-in process. |