summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.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/UIProcess/Plugins/PluginProcessProxy.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/UIProcess/Plugins/PluginProcessProxy.cpp')
-rw-r--r--Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp71
1 files changed, 33 insertions, 38 deletions
diff --git a/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp b/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
index 5a49f9598..107ad1633 100644
--- a/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
+++ b/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
@@ -28,13 +28,13 @@
#if ENABLE(PLUGIN_PROCESS)
+#include "PluginProcessConnectionManagerMessages.h"
#include "PluginProcessCreationParameters.h"
#include "PluginProcessManager.h"
#include "PluginProcessMessages.h"
#include "WebContext.h"
#include "WebCoreArgumentCoders.h"
#include "WebPluginSiteDataManager.h"
-#include "WebProcessMessages.h"
#include "WebProcessProxy.h"
#include <WebCore/NotImplemented.h>
#include <WebCore/RunLoop.h>
@@ -47,44 +47,48 @@ using namespace WebCore;
namespace WebKit {
-static const double minimumLifetime = 30 * 60;
-static const double shutdownTimeout = 10 * 60;
+static const double minimumLifetime = 2 * 60;
+static const double snapshottingMinimumLifetime = 30;
-PassRefPtr<PluginProcessProxy> PluginProcessProxy::create(PluginProcessManager* PluginProcessManager, const PluginModuleInfo& pluginInfo, PluginProcess::Type processType)
+static const double shutdownTimeout = 1 * 60;
+static const double snapshottingShutdownTimeout = 15;
+
+PassRefPtr<PluginProcessProxy> PluginProcessProxy::create(PluginProcessManager* PluginProcessManager, const PluginProcessAttributes& pluginProcessAttributes, uint64_t pluginProcessToken)
{
- return adoptRef(new PluginProcessProxy(PluginProcessManager, pluginInfo, processType));
+ return adoptRef(new PluginProcessProxy(PluginProcessManager, pluginProcessAttributes, pluginProcessToken));
}
-PluginProcessProxy::PluginProcessProxy(PluginProcessManager* PluginProcessManager, const PluginModuleInfo& pluginInfo, PluginProcess::Type processType)
+PluginProcessProxy::PluginProcessProxy(PluginProcessManager* PluginProcessManager, const PluginProcessAttributes& pluginProcessAttributes, uint64_t pluginProcessToken)
: m_pluginProcessManager(PluginProcessManager)
- , m_pluginInfo(pluginInfo)
+ , m_pluginProcessAttributes(pluginProcessAttributes)
+ , m_pluginProcessToken(pluginProcessToken)
, m_numPendingConnectionRequests(0)
#if PLATFORM(MAC)
, m_modalWindowIsShowing(false)
, m_fullscreenWindowIsShowing(false)
, m_preFullscreenAppPresentationOptions(0)
#endif
- , m_processType(processType)
{
- ProcessLauncher::LaunchOptions launchOptions;
- launchOptions.processType = ProcessLauncher::PluginProcess;
-
- platformInitializeLaunchOptions(launchOptions, pluginInfo);
-
- m_processLauncher = ProcessLauncher::create(this, launchOptions);
+ connect();
}
PluginProcessProxy::~PluginProcessProxy()
{
}
+void PluginProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
+{
+ launchOptions.processType = ProcessLauncher::PluginProcess;
+ platformGetLaunchOptions(launchOptions, m_pluginProcessAttributes);
+}
+
// Asks the plug-in process to create a new connection to a web process. The connection identifier will be
// encoded in the given argument encoder and sent back to the connection of the given web process.
void PluginProcessProxy::getPluginProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply> reply)
{
m_pendingConnectionReplies.append(reply);
- if (m_processLauncher->isLaunching()) {
+ if (isLaunching()) {
m_numPendingConnectionRequests++;
return;
}
@@ -99,7 +103,7 @@ void PluginProcessProxy::getSitesWithData(WebPluginSiteDataManager* webPluginSit
ASSERT(!m_pendingGetSitesReplies.contains(callbackID));
m_pendingGetSitesReplies.set(callbackID, webPluginSiteDataManager);
- if (m_processLauncher->isLaunching()) {
+ if (isLaunching()) {
m_pendingGetSitesRequests.append(callbackID);
return;
}
@@ -113,7 +117,7 @@ void PluginProcessProxy::clearSiteData(WebPluginSiteDataManager* webPluginSiteDa
ASSERT(!m_pendingClearSiteDataReplies.contains(callbackID));
m_pendingClearSiteDataReplies.set(callbackID, webPluginSiteDataManager);
- if (m_processLauncher->isLaunching()) {
+ if (isLaunching()) {
ClearSiteDataRequest request;
request.sites = sites;
request.flags = flags;
@@ -127,11 +131,6 @@ void PluginProcessProxy::clearSiteData(WebPluginSiteDataManager* webPluginSiteDa
m_connection->send(Messages::PluginProcess::ClearSiteData(sites, flags, maxAgeInSeconds, callbackID), 0);
}
-void PluginProcessProxy::terminate()
-{
- m_processLauncher->terminateProcess();
-}
-
void PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch()
{
// The plug-in process must have crashed or exited, send any pending sync replies we might have.
@@ -157,11 +156,6 @@ void PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch()
m_pluginProcessManager->removePluginProcessProxy(this);
}
-void PluginProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder)
-{
- didReceivePluginProcessProxyMessage(connection, messageID, decoder);
-}
-
void PluginProcessProxy::didClose(CoreIPC::Connection*)
{
#if PLATFORM(MAC)
@@ -174,7 +168,7 @@ void PluginProcessProxy::didClose(CoreIPC::Connection*)
const Vector<WebContext*>& contexts = WebContext::allContexts();
for (size_t i = 0; i < contexts.size(); ++i)
- contexts[i]->sendToAllProcesses(Messages::WebProcess::PluginProcessCrashed(m_pluginInfo.path, m_processType));
+ contexts[i]->sendToAllProcesses(Messages::PluginProcessConnectionManager::PluginProcessCrashed(m_pluginProcessToken));
// This will cause us to be deleted.
pluginProcessCrashedOrFailedToLaunch();
@@ -197,19 +191,20 @@ void PluginProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connectio
#if PLATFORM(MAC)
m_connection->setShouldCloseConnectionOnMachExceptions();
#elif PLATFORM(QT)
- m_connection->setShouldCloseConnectionOnProcessTermination(m_processLauncher->processIdentifier());
+ m_connection->setShouldCloseConnectionOnProcessTermination(processIdentifier());
#endif
m_connection->open();
PluginProcessCreationParameters parameters;
-
- parameters.pluginPath = m_pluginInfo.path;
- parameters.processType = m_processType;
-
- parameters.minimumLifetime = minimumLifetime;
- parameters.terminationTimeout = shutdownTimeout;
-
+ parameters.processType = m_pluginProcessAttributes.processType;
+ if (parameters.processType == PluginProcessTypeSnapshot) {
+ parameters.minimumLifetime = snapshottingMinimumLifetime;
+ parameters.terminationTimeout = snapshottingShutdownTimeout;
+ } else {
+ parameters.minimumLifetime = minimumLifetime;
+ parameters.terminationTimeout = shutdownTimeout;
+ }
platformInitializePluginProcess(parameters);
// Initialize the plug-in host process.
@@ -232,8 +227,8 @@ void PluginProcessProxy::didFinishLaunching(ProcessLauncher*, CoreIPC::Connectio
m_numPendingConnectionRequests = 0;
#if PLATFORM(MAC)
- if (WebContext::applicationIsOccluded())
- m_connection->send(Messages::PluginProcess::SetApplicationIsOccluded(true), 0);
+ if (WebContext::canEnableProcessSuppressionForGlobalChildProcesses())
+ setProcessSuppressionEnabled(true);
#endif
}