diff options
Diffstat (limited to 'Source/WebKit2/PluginProcess/PluginProcess.cpp')
-rw-r--r-- | Source/WebKit2/PluginProcess/PluginProcess.cpp | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/Source/WebKit2/PluginProcess/PluginProcess.cpp b/Source/WebKit2/PluginProcess/PluginProcess.cpp index 9a9f3bc..e35de9d 100644 --- a/Source/WebKit2/PluginProcess/PluginProcess.cpp +++ b/Source/WebKit2/PluginProcess/PluginProcess.cpp @@ -72,6 +72,11 @@ void PluginProcess::removeWebProcessConnection(WebProcessConnection* webProcessC ASSERT(vectorIndex != notFound); m_webProcessConnections.remove(vectorIndex); + + if (m_webProcessConnections.isEmpty() && m_pluginModule) { + // Decrement the load count. This is balanced by a call to incrementLoadCount in createWebProcessConnection. + m_pluginModule->decrementLoadCount(); + } startShutdownTimerIfNecessary(); } @@ -133,6 +138,8 @@ void PluginProcess::createWebProcessConnection() mach_port_t listeningPort; mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &listeningPort); + bool didHaveAnyWebProcessConnections = !m_webProcessConnections.isEmpty(); + // Create a listening connection. RefPtr<WebProcessConnection> connection = WebProcessConnection::create(listeningPort); m_webProcessConnections.append(connection.release()); @@ -140,6 +147,14 @@ void PluginProcess::createWebProcessConnection() CoreIPC::MachPort clientPort(listeningPort, MACH_MSG_TYPE_MAKE_SEND); m_connection->send(Messages::PluginProcessProxy::DidCreateWebProcessConnection(clientPort), 0); + if (NetscapePluginModule* module = netscapePluginModule()) { + if (!didHaveAnyWebProcessConnections) { + // Increment the load count. This is matched by a call to decrementLoadCount in removeWebProcessConnection. + // We do this so that the plug-in module's NP_Shutdown won't be called until right before exiting. + module->incrementLoadCount(); + } + } + // Stop the shutdown timer. m_shutdownTimer.stop(); } |