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/UIProcess/Plugins/PluginProcessProxy.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/UIProcess/Plugins/PluginProcessProxy.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp | 71 |
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 } |