[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc
aroben at apple.com
aroben at apple.com
Wed Dec 22 14:38:41 UTC 2010
The following commit has been merged in the debian/experimental branch:
commit a5dcda08714a2d5c3c40a3820be0ee87f924678a
Author: aroben at apple.com <aroben at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Thu Oct 14 19:22:27 2010 +0000
Make sure WebKit2 only loads each plugin once
Fixes <http://webkit.org/b/47677> <rdar://problem/8552178> WebKit2 can
load the same plugin multiple times
Reviewed by Sam Weinig.
* UIProcess/Plugins/PluginInfoStore.cpp:
(WebKit::addFromVector): Helper function that adds all the elements
from a Vector to a HashSet.
(WebKit::PluginInfoStore::loadPluginsIfNecessary): Put all the plugin
paths into a HashSet, then load the plugins specified in the HashSet.
On Windows, the HashSet is case-insensitive, just like the file
system.
* UIProcess/Plugins/PluginInfoStore.h: Removed loadPluginsInDirectory,
which is no longer used.
* UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
(WebKit::addPluginPathsFromRegistry):
(WebKit::PluginInfoStore::individualPluginPaths):
Changed to store the paths in a Vector instead of a HashSet now that
loadPluginsIfNecessary will handle duplicates for us.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@69790 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 8ddbf26..5b861c5 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,5 +1,31 @@
2010-10-14 Adam Roben <aroben at apple.com>
+ Make sure WebKit2 only loads each plugin once
+
+ Fixes <http://webkit.org/b/47677> <rdar://problem/8552178> WebKit2 can
+ load the same plugin multiple times
+
+ Reviewed by Sam Weinig.
+
+ * UIProcess/Plugins/PluginInfoStore.cpp:
+ (WebKit::addFromVector): Helper function that adds all the elements
+ from a Vector to a HashSet.
+ (WebKit::PluginInfoStore::loadPluginsIfNecessary): Put all the plugin
+ paths into a HashSet, then load the plugins specified in the HashSet.
+ On Windows, the HashSet is case-insensitive, just like the file
+ system.
+
+ * UIProcess/Plugins/PluginInfoStore.h: Removed loadPluginsInDirectory,
+ which is no longer used.
+
+ * UIProcess/Plugins/win/PluginInfoStoreWin.cpp:
+ (WebKit::addPluginPathsFromRegistry):
+ (WebKit::PluginInfoStore::individualPluginPaths):
+ Changed to store the paths in a Vector instead of a HashSet now that
+ loadPluginsIfNecessary will handle duplicates for us.
+
+2010-10-14 Adam Roben <aroben at apple.com>
+
Load plugins that are specified in the MozillaPlugins registry key
Fixes <http://webkit.org/b/44271> <rdar://problem/8329750> WebKit2
diff --git a/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp b/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp
index 8faffa1..22f4678 100644
--- a/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp
+++ b/WebKit2/UIProcess/Plugins/PluginInfoStore.cpp
@@ -51,6 +51,19 @@ void PluginInfoStore::refresh()
m_pluginListIsUpToDate = false;
}
+template <typename T, typename U, typename V, typename W>
+static void addFromVector(HashSet<T, U, V>& hashSet, const W& vector)
+{
+ for (size_t i = 0; i < vector.size(); ++i)
+ hashSet.add(vector[i]);
+}
+
+#if OS(WINDOWS)
+typedef HashSet<String, CaseFoldingHash> PathHashSet;
+#else
+typedef HashSet<String> PathHashSet;
+#endif
+
void PluginInfoStore::loadPluginsIfNecessary()
{
if (m_pluginListIsUpToDate)
@@ -58,28 +71,25 @@ void PluginInfoStore::loadPluginsIfNecessary()
m_plugins.clear();
+ PathHashSet uniquePluginPaths;
+
// First, load plug-ins from the additional plug-ins directories specified.
for (size_t i = 0; i < m_additionalPluginsDirectories.size(); ++i)
- loadPluginsInDirectory(m_additionalPluginsDirectories[i]);
+ addFromVector(uniquePluginPaths, pluginPathsInDirectory(m_additionalPluginsDirectories[i]));
// Then load plug-ins from the standard plug-ins directories.
Vector<String> directories = pluginsDirectories();
for (size_t i = 0; i < directories.size(); ++i)
- loadPluginsInDirectory(directories[i]);
+ addFromVector(uniquePluginPaths, pluginPathsInDirectory(directories[i]));
// Then load plug-ins that are not in the standard plug-ins directories.
- Vector<String> paths = individualPluginPaths();
- for (size_t i = 0; i < paths.size(); ++i)
- loadPlugin(paths[i]);
+ addFromVector(uniquePluginPaths, individualPluginPaths());
- m_pluginListIsUpToDate = true;
-}
+ PathHashSet::const_iterator end = uniquePluginPaths.end();
+ for (PathHashSet::const_iterator it = uniquePluginPaths.begin(); it != end; ++it)
+ loadPlugin(*it);
-void PluginInfoStore::loadPluginsInDirectory(const String& directory)
-{
- Vector<String> pluginPaths = pluginPathsInDirectory(directory);
- for (size_t i = 0; i < pluginPaths.size(); ++i)
- loadPlugin(pluginPaths[i]);
+ m_pluginListIsUpToDate = true;
}
void PluginInfoStore::loadPlugin(const String& pluginPath)
diff --git a/WebKit2/UIProcess/Plugins/PluginInfoStore.h b/WebKit2/UIProcess/Plugins/PluginInfoStore.h
index 179bacf..f3e669e 100644
--- a/WebKit2/UIProcess/Plugins/PluginInfoStore.h
+++ b/WebKit2/UIProcess/Plugins/PluginInfoStore.h
@@ -68,7 +68,6 @@ private:
Plugin findPluginForExtension(const String& extension, String& mimeType);
void loadPluginsIfNecessary();
- void loadPluginsInDirectory(const String& directory);
void loadPlugin(const String& pluginPath);
// Platform-specific member functions
diff --git a/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp b/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp
index 2829796..645b4c0 100644
--- a/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp
+++ b/WebKit2/UIProcess/Plugins/win/PluginInfoStoreWin.cpp
@@ -29,9 +29,7 @@
#include "NotImplemented.h"
#include <WebCore/FileSystem.h>
#include <shlwapi.h>
-#include <wtf/HashSet.h>
#include <wtf/OwnArrayPtr.h>
-#include <wtf/text/StringHash.h>
using namespace WebCore;
@@ -305,7 +303,7 @@ Vector<String> PluginInfoStore::pluginPathsInDirectory(const String& directory)
return paths;
}
-static void addPluginPathsFromRegistry(HKEY rootKey, HashSet<String, CaseFoldingHash>& paths)
+static void addPluginPathsFromRegistry(HKEY rootKey, Vector<String>& paths)
{
HKEY key;
if (::RegOpenKeyExW(rootKey, L"Software\\MozillaPlugins", 0, KEY_ENUMERATE_SUB_KEYS, &key) != ERROR_SUCCESS)
@@ -326,7 +324,7 @@ static void addPluginPathsFromRegistry(HKEY rootKey, HashSet<String, CaseFolding
if (type != REG_SZ)
continue;
- paths.add(path);
+ paths.append(path);
}
::RegCloseKey(key);
@@ -334,14 +332,12 @@ static void addPluginPathsFromRegistry(HKEY rootKey, HashSet<String, CaseFolding
Vector<String> PluginInfoStore::individualPluginPaths()
{
- HashSet<String, CaseFoldingHash> paths;
+ Vector<String> paths;
addPluginPathsFromRegistry(HKEY_LOCAL_MACHINE, paths);
addPluginPathsFromRegistry(HKEY_CURRENT_USER, paths);
- Vector<String> result;
- copyToVector(paths, result);
- return result;
+ return paths;
}
static String getVersionInfo(const LPVOID versionInfoData, const String& info)
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list