summaryrefslogtreecommitdiff
path: root/Source/WebKit2/PluginProcess/PluginProcess.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2013-09-13 12:51:20 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-19 20:50:05 +0200
commitd441d6f39bb846989d95bcf5caf387b42414718d (patch)
treee367e64a75991c554930278175d403c072de6bb8 /Source/WebKit2/PluginProcess/PluginProcess.cpp
parent0060b2994c07842f4c59de64b5e3e430525c4b90 (diff)
downloadqtwebkit-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/PluginProcess/PluginProcess.cpp')
-rw-r--r--Source/WebKit2/PluginProcess/PluginProcess.cpp61
1 files changed, 36 insertions, 25 deletions
diff --git a/Source/WebKit2/PluginProcess/PluginProcess.cpp b/Source/WebKit2/PluginProcess/PluginProcess.cpp
index 7b45c09fb..31305aa9b 100644
--- a/Source/WebKit2/PluginProcess/PluginProcess.cpp
+++ b/Source/WebKit2/PluginProcess/PluginProcess.cpp
@@ -36,6 +36,7 @@
#include "PluginProcessCreationParameters.h"
#include "PluginProcessProxyMessages.h"
#include "WebProcessConnection.h"
+#include <WebCore/MemoryPressureHandler.h>
#include <WebCore/NotImplemented.h>
#include <WebCore/RunLoop.h>
@@ -49,6 +50,7 @@
#include <sys/resource.h>
#include <sys/socket.h>
#include <unistd.h>
+#include <wtf/UniStdExtras.h>
#ifdef SOCK_SEQPACKET
#define SOCKET_TYPE SOCK_SEQPACKET
@@ -78,21 +80,27 @@ PluginProcess::PluginProcess()
, m_compositingRenderServerPort(MACH_PORT_NULL)
#endif
{
+ NetscapePlugin::setSetExceptionFunction(WebProcessConnection::setGlobalException);
}
PluginProcess::~PluginProcess()
{
}
-void PluginProcess::initialize(CoreIPC::Connection::Identifier serverIdentifier, RunLoop* runLoop)
+void PluginProcess::lowMemoryHandler(bool critical)
{
- ASSERT(!m_connection);
+ UNUSED_PARAM(critical);
+ if (shared().shouldTerminate())
+ shared().terminate();
+}
- m_connection = CoreIPC::Connection::createClientConnection(serverIdentifier, this, runLoop);
- m_connection->setDidCloseOnConnectionWorkQueueCallback(didCloseOnConnectionWorkQueue);
- m_connection->open();
+void PluginProcess::initializeProcess(const ChildProcessInitializationParameters& parameters)
+{
+ m_pluginPath = parameters.extraInitializationData.get("plugin-path");
+ platformInitializeProcess(parameters);
- NetscapePlugin::setSetExceptionFunction(WebProcessConnection::setGlobalException);
+ memoryPressureHandler().setLowMemoryHandler(lowMemoryHandler);
+ memoryPressureHandler().install();
}
void PluginProcess::removeWebProcessConnection(WebProcessConnection* webProcessConnection)
@@ -129,14 +137,12 @@ NetscapePluginModule* PluginProcess::netscapePluginModule()
bool PluginProcess::shouldTerminate()
{
- ASSERT(m_webProcessConnections.isEmpty());
-
- return true;
+ return m_webProcessConnections.isEmpty();
}
-void PluginProcess::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder)
+void PluginProcess::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageDecoder& decoder)
{
- didReceivePluginProcessMessage(connection, messageID, decoder);
+ didReceivePluginProcessMessage(connection, decoder);
}
void PluginProcess::didClose(CoreIPC::Connection*)
@@ -154,12 +160,11 @@ void PluginProcess::initializePluginProcess(const PluginProcessCreationParameter
{
ASSERT(!m_pluginModule);
- m_pluginPath = parameters.pluginPath;
m_supportsAsynchronousPluginInitialization = parameters.supportsAsynchronousPluginInitialization;
setMinimumLifetime(parameters.minimumLifetime);
setTerminationTimeout(parameters.terminationTimeout);
- platformInitialize(parameters);
+ platformInitializePluginProcess(parameters);
}
void PluginProcess::createWebProcessConnection()
@@ -176,7 +181,7 @@ void PluginProcess::createWebProcessConnection()
m_webProcessConnections.append(connection.release());
CoreIPC::Attachment clientPort(listeningPort, MACH_MSG_TYPE_MAKE_SEND);
- m_connection->send(Messages::PluginProcessProxy::DidCreateWebProcessConnection(clientPort, m_supportsAsynchronousPluginInitialization), 0);
+ parentProcessConnection()->send(Messages::PluginProcessProxy::DidCreateWebProcessConnection(clientPort, m_supportsAsynchronousPluginInitialization), 0);
#elif USE(UNIX_DOMAIN_SOCKETS)
int sockets[2];
if (socketpair(AF_UNIX, SOCKET_TYPE, 0, sockets) == -1) {
@@ -188,8 +193,8 @@ void PluginProcess::createWebProcessConnection()
while (fcntl(sockets[1], F_SETFD, FD_CLOEXEC) == -1) {
if (errno != EINTR) {
ASSERT_NOT_REACHED();
- while (close(sockets[0]) == -1 && errno == EINTR) { }
- while (close(sockets[1]) == -1 && errno == EINTR) { }
+ closeWithRetry(sockets[0]);
+ closeWithRetry(sockets[1]);
return;
}
}
@@ -198,8 +203,8 @@ void PluginProcess::createWebProcessConnection()
while (fcntl(sockets[0], F_SETFD, FD_CLOEXEC) == -1) {
if (errno != EINTR) {
ASSERT_NOT_REACHED();
- while (close(sockets[0]) == -1 && errno == EINTR) { }
- while (close(sockets[1]) == -1 && errno == EINTR) { }
+ closeWithRetry(sockets[0]);
+ closeWithRetry(sockets[1]);
return;
}
}
@@ -208,7 +213,7 @@ void PluginProcess::createWebProcessConnection()
m_webProcessConnections.append(connection.release());
CoreIPC::Attachment clientSocket(sockets[0]);
- m_connection->send(Messages::PluginProcessProxy::DidCreateWebProcessConnection(clientSocket, m_supportsAsynchronousPluginInitialization), 0);
+ parentProcessConnection()->send(Messages::PluginProcessProxy::DidCreateWebProcessConnection(clientSocket, m_supportsAsynchronousPluginInitialization), 0);
#else
notImplemented();
#endif
@@ -226,19 +231,15 @@ void PluginProcess::createWebProcessConnection()
void PluginProcess::getSitesWithData(uint64_t callbackID)
{
- LocalTerminationDisabler terminationDisabler(*this);
-
Vector<String> sites;
if (NetscapePluginModule* module = netscapePluginModule())
sites = module->sitesWithData();
- m_connection->send(Messages::PluginProcessProxy::DidGetSitesWithData(sites, callbackID), 0);
+ parentProcessConnection()->send(Messages::PluginProcessProxy::DidGetSitesWithData(sites, callbackID), 0);
}
void PluginProcess::clearSiteData(const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID)
{
- LocalTerminationDisabler terminationDisabler(*this);
-
if (NetscapePluginModule* module = netscapePluginModule()) {
if (sites.isEmpty()) {
// Clear everything.
@@ -249,7 +250,7 @@ void PluginProcess::clearSiteData(const Vector<String>& sites, uint64_t flags, u
}
}
- m_connection->send(Messages::PluginProcessProxy::DidClearSiteData(callbackID), 0);
+ parentProcessConnection()->send(Messages::PluginProcessProxy::DidClearSiteData(callbackID), 0);
}
void PluginProcess::setMinimumLifetime(double lifetime)
@@ -267,6 +268,16 @@ void PluginProcess::minimumLifetimeTimerFired()
enableTermination();
}
+#if !PLATFORM(MAC)
+void PluginProcess::initializeProcessName(const ChildProcessInitializationParameters&)
+{
+}
+
+void PluginProcess::initializeSandbox(const ChildProcessInitializationParameters&, SandboxInitializationParameters&)
+{
+}
+#endif
+
} // namespace WebKit
#endif // ENABLE(PLUGIN_PROCESS)