From 8d473cf9743f1d30a16a27114e93bd5af5648d23 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 18 May 2012 14:03:11 +0200 Subject: Imported WebKit commit 1350e72f7345ced9da2bd9980deeeb5a8d62fab4 (http://svn.webkit.org/repository/webkit/trunk@117578) Weekly snapshot --- .../WebKit2/UIProcess/Plugins/PluginInfoStore.cpp | 30 +++++++++++++++++----- Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h | 3 +++ .../Plugins/gtk/PluginProcessProxyGtk.cpp | 7 ++--- .../UIProcess/Plugins/mac/PluginInfoStoreMac.mm | 6 +++++ .../UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp | 6 +++++ .../UIProcess/Plugins/win/PluginInfoStoreWin.cpp | 6 +++++ 6 files changed, 49 insertions(+), 9 deletions(-) (limited to 'Source/WebKit2/UIProcess/Plugins') diff --git a/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp b/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp index 97775c626..37ff06030 100644 --- a/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp +++ b/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp @@ -69,6 +69,16 @@ typedef ListHashSet PathHashSet; typedef ListHashSet PathHashSet; #endif +static inline Vector deepIsolatedCopyPluginInfoVector(const Vector& vector) +{ + // Let the copy begin! + Vector copy; + copy.reserveCapacity(vector.size()); + for (unsigned i = 0; i < vector.size(); ++i) + copy.append(vector[i].isolatedCopy()); + return copy; +} + void PluginInfoStore::loadPluginsIfNecessary() { if (m_pluginListIsUpToDate) @@ -94,7 +104,8 @@ void PluginInfoStore::loadPluginsIfNecessary() for (PathHashSet::const_iterator it = uniquePluginPaths.begin(); it != end; ++it) loadPlugin(plugins, *it); - m_plugins.swap(plugins); + m_plugins = deepIsolatedCopyPluginInfoVector(plugins); + m_pluginListIsUpToDate = true; } @@ -113,15 +124,15 @@ void PluginInfoStore::loadPlugin(Vector& plugins, const String Vector PluginInfoStore::plugins() { + MutexLocker locker(m_pluginsLock); loadPluginsIfNecessary(); - - Vector plugins(m_plugins); - - return plugins; + return deepIsolatedCopyPluginInfoVector(m_plugins); } PluginModuleInfo PluginInfoStore::findPluginForMIMEType(const String& mimeType) const { + MutexLocker locker(m_pluginsLock); + ASSERT(!mimeType.isNull()); for (size_t i = 0; i < m_plugins.size(); ++i) { @@ -139,6 +150,8 @@ PluginModuleInfo PluginInfoStore::findPluginForMIMEType(const String& mimeType) PluginModuleInfo PluginInfoStore::findPluginForExtension(const String& extension, String& mimeType) const { + MutexLocker locker(m_pluginsLock); + ASSERT(!extension.isNull()); for (size_t i = 0; i < m_plugins.size(); ++i) { @@ -187,7 +200,10 @@ String PluginInfoStore::getMIMETypeForExtension(const String& extension) PluginModuleInfo PluginInfoStore::findPlugin(String& mimeType, const KURL& url) { - loadPluginsIfNecessary(); + { + MutexLocker locker(m_pluginsLock); + loadPluginsIfNecessary(); + } // First, check if we can get the plug-in based on its MIME type. if (!mimeType.isNull()) { @@ -219,6 +235,8 @@ PluginModuleInfo PluginInfoStore::findPlugin(String& mimeType, const KURL& url) PluginModuleInfo PluginInfoStore::infoForPluginWithPath(const String& pluginPath) const { + MutexLocker locker(m_pluginsLock); + for (size_t i = 0; i < m_plugins.size(); ++i) { if (m_plugins[i].path == pluginPath) return m_plugins[i]; diff --git a/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h b/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h index f30303c83..42df69b09 100644 --- a/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h +++ b/Source/WebKit2/UIProcess/Plugins/PluginInfoStore.h @@ -27,6 +27,7 @@ #define PluginInfoStore_h #include "PluginModuleInfo.h" +#include namespace WebCore { class KURL; @@ -87,6 +88,8 @@ private: Vector m_additionalPluginsDirectories; Vector m_plugins; bool m_pluginListIsUpToDate; + + mutable Mutex m_pluginsLock; }; } // namespace WebKit diff --git a/Source/WebKit2/UIProcess/Plugins/gtk/PluginProcessProxyGtk.cpp b/Source/WebKit2/UIProcess/Plugins/gtk/PluginProcessProxyGtk.cpp index 653c72965..fa9339d09 100644 --- a/Source/WebKit2/UIProcess/Plugins/gtk/PluginProcessProxyGtk.cpp +++ b/Source/WebKit2/UIProcess/Plugins/gtk/PluginProcessProxyGtk.cpp @@ -31,6 +31,7 @@ #include "PluginProcessCreationParameters.h" #include "ProcessExecutablePath.h" #include +#include #include #include #include @@ -54,8 +55,8 @@ bool PluginProcessProxy::scanPlugin(const String& pluginPath, RawPluginMetaData& argv[3] = 0; gint status; - gchar* stdOut; - if (!g_spawn_sync(0, argv, 0, G_SPAWN_STDERR_TO_DEV_NULL, 0, 0, &stdOut, 0, &status, 0)) + GOwnPtr stdOut; + if (!g_spawn_sync(0, argv, 0, G_SPAWN_STDERR_TO_DEV_NULL, 0, 0, &stdOut.outPtr(), 0, &status, 0)) return false; if (!WIFEXITED(status) || WEXITSTATUS(status) != EXIT_SUCCESS) return false; @@ -63,7 +64,7 @@ bool PluginProcessProxy::scanPlugin(const String& pluginPath, RawPluginMetaData& const unsigned kNumLinesExpected = 3; String lines[kNumLinesExpected]; unsigned lineIndex = 0; - const UChar* current = reinterpret_cast(stdOut); + const UChar* current = reinterpret_cast(stdOut.get()); while (lineIndex < kNumLinesExpected) { const UChar* start = current; while (*current++ != UChar('\n')) { } diff --git a/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm b/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm index 7a04b5355..8688cfa79 100644 --- a/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm +++ b/Source/WebKit2/UIProcess/Plugins/mac/PluginInfoStoreMac.mm @@ -73,7 +73,13 @@ Vector PluginInfoStore::individualPluginPaths() bool PluginInfoStore::getPluginInfo(const String& pluginPath, PluginModuleInfo& plugin) { +#if ENABLE(NETSCAPE_PLUGIN_API) return NetscapePluginModule::getPluginInfo(pluginPath, plugin); +#else + UNUSED_PARAM(pluginPath); + UNUSED_PARAM(plugin); + return false; +#endif } bool PluginInfoStore::shouldUsePlugin(Vector& alreadyLoadedPlugins, const PluginModuleInfo& plugin) diff --git a/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp b/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp index caecf7942..aa44998d1 100644 --- a/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp +++ b/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp @@ -95,7 +95,13 @@ Vector PluginInfoStore::individualPluginPaths() bool PluginInfoStore::getPluginInfo(const String& pluginPath, PluginModuleInfo& plugin) { +#if ENABLE(NETSCAPE_PLUGIN_API) return NetscapePluginModule::getPluginInfo(pluginPath, plugin); +#else + UNUSED_PARAM(pluginPath); + UNUSED_PARAM(plugin); + return false; +#endif } bool PluginInfoStore::shouldUsePlugin(Vector& alreadyLoadedPlugins, const PluginModuleInfo& plugin) diff --git a/Source/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp b/Source/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp index 78d0562d9..634225eaf 100644 --- a/Source/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp +++ b/Source/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp @@ -325,7 +325,13 @@ static uint64_t fileVersion(DWORD leastSignificant, DWORD mostSignificant) bool PluginInfoStore::getPluginInfo(const String& pluginPath, PluginModuleInfo& plugin) { +#if ENABLE(NETSCAPE_PLUGIN_API) return NetscapePluginModule::getPluginInfo(pluginPath, plugin); +#else + UNUSED_PARAM(pluginPath); + UNUSED_PARAM(plugin); + return false; +#endif } static bool isOldWindowsMediaPlayerPlugin(const PluginModuleInfo& plugin) -- cgit v1.2.1