Changeset 84302 in webkit
- Timestamp:
- Apr 19, 2011 3:35:33 PM (13 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r84297 r84302 1 2011-04-19 Anders Carlsson <andersca@apple.com> 2 3 Reviewed by Dan Bernstein. 4 5 Terminate hung plug-in processes after 45 seconds 6 https://bugs.webkit.org/show_bug.cgi?id=58932 7 <rdar://problem/8083219> 8 9 * UIProcess/Plugins/PluginProcessManager.cpp: 10 (WebKit::PluginProcessManager::pluginSyncMessageSendTimedOut): 11 Find the plug-in process proxy and terminate it. 12 13 (WebKit::PluginProcessManager::pluginProcessWithPath): 14 Add new helper function. 15 16 (WebKit::PluginProcessManager::getOrCreatePluginProcess): 17 Call pluginProcessWithPath. 18 19 * UIProcess/Plugins/PluginProcessProxy.cpp: 20 (WebKit::PluginProcessProxy::terminate): 21 Terminate the process. 22 23 * UIProcess/Plugins/PluginProcessProxy.h: 24 * UIProcess/WebProcessProxy.cpp: 25 (WebKit::WebProcessProxy::pluginSyncMessageSendTimedOut): 26 Call PluginProcessManager::pluginSyncMessageSendTimedOut. 27 28 * UIProcess/WebProcessProxy.h: 29 * UIProcess/WebProcessProxy.messages.in: 30 Add PluginSyncMessageSendTimedOut message. 31 32 * WebProcess/Plugins/PluginProcessConnection.cpp: 33 (WebKit::defaultSyncMessageTimeout): 34 (WebKit::PluginProcessConnection::PluginProcessConnection): 35 Set a sync message timeout on the plug-in process connection. 36 37 (WebKit::PluginProcessConnection::syncMessageSendTimedOut): 38 Send a message to the web process proxy. 39 1 40 2011-04-19 Alexey Proskuryakov <ap@apple.com> 2 41 -
trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp
r84174 r84302 75 75 } 76 76 77 void PluginProcessManager::pluginSyncMessageSendTimedOut(const String& pluginPath) 78 { 79 PluginProcessProxy* pluginProcess = pluginProcessWithPath(pluginPath); 80 if (!pluginProcess) 81 return; 82 83 pluginProcess->terminate(); 84 } 85 86 PluginProcessProxy* PluginProcessManager::pluginProcessWithPath(const String& pluginPath) 87 { 88 for (size_t i = 0; i < m_pluginProcesses.size(); ++i) { 89 if (m_pluginProcesses[i]->pluginInfo().path == pluginPath) 90 return m_pluginProcesses[i]; 91 } 92 return 0; 93 } 94 77 95 PluginProcessProxy* PluginProcessManager::getOrCreatePluginProcess(const PluginInfoStore::Plugin& plugin) 78 96 { 79 for (size_t i = 0; i < m_pluginProcesses.size(); ++i) { 80 if (m_pluginProcesses[i]->pluginInfo().path == plugin.path) 81 return m_pluginProcesses[i]; 82 } 97 if (PluginProcessProxy* pluginProcess = pluginProcessWithPath(plugin.path)) 98 return pluginProcess; 83 99 84 100 PluginProcessProxy* pluginProcess = PluginProcessProxy::create(this, plugin).leakPtr(); -
trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h
r84174 r84302 57 57 void clearSiteData(const PluginInfoStore::Plugin&, WebPluginSiteDataManager*, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID); 58 58 59 void pluginSyncMessageSendTimedOut(const String& pluginPath); 60 59 61 private: 60 62 PluginProcessManager(); 61 63 62 64 PluginProcessProxy* getOrCreatePluginProcess(const PluginInfoStore::Plugin&); 65 PluginProcessProxy* pluginProcessWithPath(const String& pluginPath); 63 66 64 67 Vector<PluginProcessProxy*> m_pluginProcesses; -
trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp
r84293 r84302 121 121 } 122 122 123 void PluginProcessProxy::terminate() 124 { 125 m_processLauncher->terminateProcess(); 126 } 127 123 128 void PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch() 124 129 { -
trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.h
r84293 r84302 72 72 // Asks the plug-in process to clear the data for the given sites. 73 73 void clearSiteData(WebPluginSiteDataManager*, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID); 74 75 // Terminates the plug-in process. 76 void terminate(); 74 77 75 78 private: -
trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp
r84293 r84302 221 221 PluginProcessManager::shared().getPluginProcessConnection(context()->pluginInfoStore(), pluginPath, reply); 222 222 } 223 224 void WebProcessProxy::pluginSyncMessageSendTimedOut(const String& pluginPath) 225 { 226 PluginProcessManager::shared().pluginSyncMessageSendTimedOut(pluginPath); 227 } 223 228 #endif 224 229 -
trunk/Source/WebKit2/UIProcess/WebProcessProxy.h
r84293 r84302 123 123 #if ENABLE(PLUGIN_PROCESS) 124 124 void getPluginProcessConnection(const String& pluginPath, PassRefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply>); 125 void pluginSyncMessageSendTimedOut(const String& pluginPath); 125 126 #endif 126 127 -
trunk/Source/WebKit2/UIProcess/WebProcessProxy.messages.in
r84174 r84302 30 30 #if ENABLE(PLUGIN_PROCESS) 31 31 GetPluginProcessConnection(WTF::String pluginPath) -> (CoreIPC::MachPort connectionHandle) Delayed 32 PluginSyncMessageSendTimedOut(WTF::String pluginPath) 32 33 #endif 33 34 } -
trunk/Source/WebKit2/WebProcess/Plugins/PluginProcessConnection.cpp
r84293 r84302 33 33 #include "PluginProxy.h" 34 34 #include "WebProcess.h" 35 #include "WebProcessProxyMessages.h" 36 #include <WebCore/FileSystem.h> 37 38 using namespace WebCore; 35 39 36 40 namespace WebKit { 41 42 // The timeout, in seconds, when sending sync messages to the plug-in. 43 static const double syncMessageTimeout = 45; 44 45 static double defaultSyncMessageTimeout(const String& pluginPath) 46 { 47 // We don't want a message timeout for the AppleConnect plug-in. 48 // FIXME: We should key this off something other than the path. 49 if (pathGetFileName(pluginPath) == "AppleConnect.plugin") 50 return CoreIPC::Connection::NoTimeout; 51 52 return syncMessageTimeout; 53 } 37 54 38 55 PluginProcessConnection::PluginProcessConnection(PluginProcessConnectionManager* pluginProcessConnectionManager, const String& pluginPath, CoreIPC::Connection::Identifier connectionIdentifier) … … 41 58 { 42 59 m_connection = CoreIPC::Connection::createClientConnection(connectionIdentifier, this, WebProcess::shared().runLoop()); 60 61 m_connection->setDefaultSyncMessageTimeout(defaultSyncMessageTimeout(m_pluginPath)); 43 62 m_npRemoteObjectMap = NPRemoteObjectMap::create(m_connection.get()); 44 63 … … 119 138 void PluginProcessConnection::syncMessageSendTimedOut(CoreIPC::Connection*) 120 139 { 140 WebProcess::shared().connection()->send(Messages::WebProcessProxy::PluginSyncMessageSendTimedOut(m_pluginPath), 0); 121 141 } 122 142
Note: See TracChangeset
for help on using the changeset viewer.