diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp | 67 |
1 files changed, 24 insertions, 43 deletions
diff --git a/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp b/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp index a9685618f..3b7ef381a 100644 --- a/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp +++ b/Source/WebKit2/UIProcess/Plugins/unix/PluginInfoStoreUnix.cpp @@ -32,8 +32,12 @@ #include "PluginInfoStore.h" #include "NetscapePluginModule.h" -#include "PluginDatabase.h" +#include "PluginSearchPath.h" +#include "ProcessExecutablePath.h" #include <WebCore/FileSystem.h> +#include <WebCore/PlatformDisplay.h> +#include <limits.h> +#include <stdlib.h> #if PLATFORM(GTK) #include "PluginInfoCache.h" @@ -45,51 +49,17 @@ namespace WebKit { Vector<String> PluginInfoStore::pluginsDirectories() { - Vector<String> result; - - result.append(homeDirectoryPath() + "/.mozilla/plugins"); - result.append(homeDirectoryPath() + "/.netscape/plugins"); - result.append("/usr/lib/browser/plugins"); - result.append("/usr/local/lib/mozilla/plugins"); - result.append("/usr/lib/firefox/plugins"); - result.append("/usr/lib64/browser-plugins"); - result.append("/usr/lib/browser-plugins"); - result.append("/usr/lib/mozilla/plugins"); - result.append("/usr/local/netscape/plugins"); - result.append("/opt/mozilla/plugins"); - result.append("/opt/mozilla/lib/plugins"); - result.append("/opt/netscape/plugins"); - result.append("/opt/netscape/communicator/plugins"); - result.append("/usr/lib/netscape/plugins"); - result.append("/usr/lib/netscape/plugins-libc5"); - result.append("/usr/lib/netscape/plugins-libc6"); - result.append("/usr/lib64/netscape/plugins"); - result.append("/usr/lib64/mozilla/plugins"); - result.append("/usr/lib/nsbrowser/plugins"); - result.append("/usr/lib64/nsbrowser/plugins"); - - String mozillaHome(getenv("MOZILLA_HOME")); - if (!mozillaHome.isEmpty()) - result.append(mozillaHome + "/plugins"); - - String mozillaPaths(getenv("MOZ_PLUGIN_PATH")); - if (!mozillaPaths.isEmpty()) { - Vector<String> paths; - mozillaPaths.split(UChar(':'), /* allowEmptyEntries */ false, paths); - result.appendVector(paths); - } - - return result; + return WebKit::pluginsDirectories(); } Vector<String> PluginInfoStore::pluginPathsInDirectory(const String& directory) { Vector<String> result; - Vector<String> pluginPaths = listDirectory(directory, String("*.so")); - Vector<String>::const_iterator end = pluginPaths.end(); - for (Vector<String>::const_iterator it = pluginPaths.begin(); it != end; ++it) { - if (fileExists(*it)) - result.append(*it); + char normalizedPath[PATH_MAX]; + for (const auto& path : listDirectory(directory, String("*.so"))) { + CString filename = fileSystemRepresentation(path); + if (realpath(filename.data(), normalizedPath)) + result.append(stringFromFileSystemRepresentation(normalizedPath)); } return result; @@ -103,11 +73,22 @@ Vector<String> PluginInfoStore::individualPluginPaths() bool PluginInfoStore::getPluginInfo(const String& pluginPath, PluginModuleInfo& plugin) { #if PLATFORM(GTK) - if (PluginInfoCache::shared().getPluginInfo(pluginPath, plugin)) + if (PluginInfoCache::singleton().getPluginInfo(pluginPath, plugin)) { +#if ENABLE(PLUGIN_PROCESS_GTK2) + if (plugin.requiresGtk2) { + if (PlatformDisplay::sharedDisplay().type() != PlatformDisplay::Type::X11) + return false; + String pluginProcessPath = executablePathOfPluginProcess(); + pluginProcessPath.append('2'); + if (!fileExists(pluginProcessPath)) + return false; + } +#endif return true; + } if (NetscapePluginModule::getPluginInfo(pluginPath, plugin)) { - PluginInfoCache::shared().updatePluginInfo(pluginPath, plugin); + PluginInfoCache::singleton().updatePluginInfo(pluginPath, plugin); return true; } return false; |