#ifndef PluginDatabase_h
#define PluginDatabase_h
#include "PluginPackage.h"
#include <wtf/HashSet.h>
#include <wtf/Vector.h>
#include <wtf/text/StringHash.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class Element;
class Frame;
class IntSize;
class URL;
class PluginDatabaseClient;
class PluginPackage;
typedef HashSet<RefPtr<PluginPackage>, PluginPackageHash, PluginPackageHashTraits> PluginSet;
class PluginDatabase {
WTF_MAKE_NONCOPYABLE(PluginDatabase); WTF_MAKE_FAST_ALLOCATED;
public:
PluginDatabase();
static PluginDatabase* installedPlugins(bool populate = true);
bool refresh();
void clear();
Vector<PluginPackage*> plugins() const;
bool isMIMETypeRegistered(const String& mimeType);
void addExtraPluginDirectory(const String&);
static bool isPreferredPluginDirectory(const String& directory);
static int preferredPluginCompare(const void*, const void*);
PluginPackage* findPlugin(const URL&, String& mimeType);
PluginPackage* pluginForMIMEType(const String& mimeType);
void setPreferredPluginForMIMEType(const String& mimeType, PluginPackage* plugin);
void setPluginDirectories(const Vector<String>& directories)
{
clear();
m_pluginDirectories = directories;
}
bool removeDisabledPluginFile(const String& fileName);
bool addDisabledPluginFile(const String& fileName);
static Vector<String> defaultPluginDirectories();
Vector<String> pluginDirectories() const { return m_pluginDirectories; }
String MIMETypeForExtension(const String& extension) const;
#if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE)
static bool isPersistentMetadataCacheEnabled();
static void setPersistentMetadataCacheEnabled(bool isEnabled);
static String persistentMetadataCachePath();
static void setPersistentMetadataCachePath(const String& persistentMetadataCachePath);
#endif
private:
void getPluginPathsInDirectories(HashSet<String>&) const;
void getDeletedPlugins(PluginSet&) const;
bool fileExistsAndIsNotDisabled(const String&) const;
bool add(PassRefPtr<PluginPackage>);
void remove(PluginPackage*);
#if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE)
void loadPersistentMetadataCache();
void updatePersistentMetadataCache();
#endif
HashSet<String> m_disabledPluginFiles;
Vector<String> m_pluginDirectories;
HashSet<String> m_registeredMIMETypes;
PluginSet m_plugins;
HashMap<String, RefPtr<PluginPackage> > m_pluginsByPath;
HashMap<String, time_t> m_pluginPathsWithTimes;
HashMap<String, RefPtr<PluginPackage> > m_preferredPlugins;
#if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE)
bool m_persistentMetadataCacheIsLoaded;
#endif
};
}
#endif