#ifndef PluginData_h
#define PluginData_h
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
class Page;
struct PluginInfo;
enum PluginLoadClientPolicy : uint8_t {
PluginLoadClientPolicyUndefined = 0,
PluginLoadClientPolicyBlock,
PluginLoadClientPolicyAsk,
PluginLoadClientPolicyAllow,
PluginLoadClientPolicyAllowAlways,
};
struct MimeClassInfo {
String type;
String desc;
Vector<String> extensions;
};
inline bool operator==(const MimeClassInfo& a, const MimeClassInfo& b)
{
return a.type == b.type && a.desc == b.desc && a.extensions == b.extensions;
}
struct PluginInfo {
String name;
String file;
String desc;
Vector<MimeClassInfo> mimes;
bool isApplicationPlugin;
PluginLoadClientPolicy clientLoadPolicy;
#if PLATFORM(MAC)
String bundleIdentifier;
String versionString;
#endif
};
inline bool operator==(PluginInfo& a, PluginInfo& b)
{
bool result = a.name == b.name && a.file == b.file && a.desc == b.desc && a.mimes == b.mimes && a.isApplicationPlugin == b.isApplicationPlugin && a.clientLoadPolicy == b.clientLoadPolicy;
#if PLATFORM(MAC)
result = result && a.bundleIdentifier == b.bundleIdentifier && a.versionString == b.versionString;
#endif
return result;
}
class PluginData : public RefCounted<PluginData> {
public:
static Ref<PluginData> create(const Page* page) { return adoptRef(*new PluginData(page)); }
const Vector<PluginInfo>& plugins() const { return m_plugins; }
Vector<PluginInfo> webVisiblePlugins() const;
WEBCORE_EXPORT void getWebVisibleMimesAndPluginIndices(Vector<MimeClassInfo>&, Vector<size_t>&) const;
enum AllowedPluginTypes {
AllPlugins,
OnlyApplicationPlugins
};
WEBCORE_EXPORT bool supportsWebVisibleMimeType(const String& mimeType, const AllowedPluginTypes) const;
String pluginNameForWebVisibleMimeType(const String& mimeType) const;
String pluginFileForWebVisibleMimeType(const String& mimeType) const;
static void refresh();
private:
explicit PluginData(const Page*);
void initPlugins();
bool getPluginInfoForWebVisibleMimeType(const String& mimeType, PluginInfo&) const;
protected:
#if defined ENABLE_WEB_REPLAY && ENABLE_WEB_REPLAY
PluginData(Vector<PluginInfo> plugins)
: m_plugins(plugins)
{
}
#endif
const Page* m_page;
Vector<PluginInfo> m_plugins;
};
}
#endif // PluginData_h