diff options
Diffstat (limited to 'Source/WebKit2/PluginProcess/PluginProcess.cpp')
-rw-r--r-- | Source/WebKit2/PluginProcess/PluginProcess.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Source/WebKit2/PluginProcess/PluginProcess.cpp b/Source/WebKit2/PluginProcess/PluginProcess.cpp index 6f868bbf8..1bffafe74 100644 --- a/Source/WebKit2/PluginProcess/PluginProcess.cpp +++ b/Source/WebKit2/PluginProcess/PluginProcess.cpp @@ -73,6 +73,7 @@ PluginProcess& PluginProcess::shared() PluginProcess::PluginProcess() : m_supportsAsynchronousPluginInitialization(false) + , m_minimumLifetimeTimer(RunLoop::main(), this, &PluginProcess::minimumLifetimeTimerFired) #if PLATFORM(MAC) , m_compositingRenderServerPort(MACH_PORT_NULL) #endif @@ -159,6 +160,7 @@ void PluginProcess::initializePluginProcess(const PluginProcessCreationParameter m_pluginPath = parameters.pluginPath; m_supportsAsynchronousPluginInitialization = parameters.supportsAsynchronousPluginInitialization; + setMinimumLifetime(parameters.minimumLifetime); setTerminationTimeout(parameters.terminationTimeout); platformInitialize(parameters); @@ -254,6 +256,21 @@ void PluginProcess::clearSiteData(const Vector<String>& sites, uint64_t flags, u m_connection->send(Messages::PluginProcessProxy::DidClearSiteData(callbackID), 0); } +void PluginProcess::setMinimumLifetime(double lifetime) +{ + if (lifetime <= 0.0) + return; + + disableTermination(); + + m_minimumLifetimeTimer.startOneShot(lifetime); +} + +void PluginProcess::minimumLifetimeTimerFired() +{ + enableTermination(); +} + } // namespace WebKit #endif // ENABLE(PLUGIN_PROCESS) |