diff options
Diffstat (limited to 'Source/WebKit2/PluginProcess')
-rw-r--r-- | Source/WebKit2/PluginProcess/PluginProcess.cpp | 17 | ||||
-rw-r--r-- | Source/WebKit2/PluginProcess/PluginProcess.h | 7 |
2 files changed, 23 insertions, 1 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) diff --git a/Source/WebKit2/PluginProcess/PluginProcess.h b/Source/WebKit2/PluginProcess/PluginProcess.h index bcbd2003e..5ae4d359e 100644 --- a/Source/WebKit2/PluginProcess/PluginProcess.h +++ b/Source/WebKit2/PluginProcess/PluginProcess.h @@ -86,6 +86,9 @@ private: void clearSiteData(const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID); void platformInitialize(const PluginProcessCreationParameters&); + + void setMinimumLifetime(double); + void minimumLifetimeTimerFired(); // The connection to the UI process. RefPtr<CoreIPC::Connection> m_connection; @@ -100,12 +103,14 @@ private: RefPtr<NetscapePluginModule> m_pluginModule; bool m_supportsAsynchronousPluginInitialization; + + WebCore::RunLoop::Timer<PluginProcess> m_minimumLifetimeTimer; #if USE(ACCELERATED_COMPOSITING) && PLATFORM(MAC) // The Mach port used for accelerated compositing. mach_port_t m_compositingRenderServerPort; #endif - + }; } // namespace WebKit |