summaryrefslogtreecommitdiff
path: root/Source/WebCore/plugins/PluginData.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/plugins/PluginData.h')
-rw-r--r--Source/WebCore/plugins/PluginData.h70
1 files changed, 52 insertions, 18 deletions
diff --git a/Source/WebCore/plugins/PluginData.h b/Source/WebCore/plugins/PluginData.h
index fec7ace74..0893fc99a 100644
--- a/Source/WebCore/plugins/PluginData.h
+++ b/Source/WebCore/plugins/PluginData.h
@@ -1,5 +1,6 @@
/*
Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+ Copyright (C) 2015 Apple Inc. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
@@ -17,8 +18,7 @@
Boston, MA 02110-1301, USA.
*/
-#ifndef PluginData_h
-#define PluginData_h
+#pragma once
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
@@ -29,6 +29,24 @@ namespace WebCore {
class Page;
struct PluginInfo;
+enum PluginLoadClientPolicy : uint8_t {
+ // No client-specific plug-in load policy has been defined. The plug-in should be visible in navigator.plugins and WebKit should synchronously
+ // ask the client whether the plug-in should be loaded.
+ PluginLoadClientPolicyUndefined = 0,
+
+ // The plug-in module should be blocked from being instantiated. The plug-in should be hidden in navigator.plugins.
+ PluginLoadClientPolicyBlock,
+
+ // WebKit should synchronously ask the client whether the plug-in should be loaded. The plug-in should be visible in navigator.plugins.
+ PluginLoadClientPolicyAsk,
+
+ // The plug-in module may be loaded if WebKit is not blocking it.
+ PluginLoadClientPolicyAllow,
+
+ // The plug-in module should be loaded irrespective of whether WebKit has asked it to be blocked.
+ PluginLoadClientPolicyAllowAlways,
+};
+
struct MimeClassInfo {
String type;
String desc;
@@ -46,38 +64,54 @@ struct PluginInfo {
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;
+}
+
// FIXME: merge with PluginDatabase in the future
class PluginData : public RefCounted<PluginData> {
public:
- static PassRefPtr<PluginData> create(const Page* page) { return adoptRef(new PluginData(page)); }
+ static Ref<PluginData> create(Page& page) { return adoptRef(*new PluginData(page)); }
const Vector<PluginInfo>& plugins() const { return m_plugins; }
- const Vector<MimeClassInfo>& mimes() const { return m_mimes; }
- const Vector<size_t>& mimePluginIndices() const { return m_mimePluginIndices; }
+ Vector<PluginInfo> webVisiblePlugins() const;
+ Vector<PluginInfo> publiclyVisiblePlugins() const;
+ WEBCORE_EXPORT void getWebVisibleMimesAndPluginIndices(Vector<MimeClassInfo>&, Vector<size_t>&) const;
enum AllowedPluginTypes {
AllPlugins,
OnlyApplicationPlugins
};
- bool supportsMimeType(const String& mimeType, const AllowedPluginTypes) const;
- String pluginNameForMimeType(const String& mimeType) const;
- String pluginFileForMimeType(const String& mimeType) const;
+ WEBCORE_EXPORT bool supportsWebVisibleMimeType(const String& mimeType, const AllowedPluginTypes) const;
+ String pluginFileForWebVisibleMimeType(const String& mimeType) const;
- static void refresh();
+ WEBCORE_EXPORT bool supportsMimeType(const String& mimeType, const AllowedPluginTypes) const;
private:
- explicit PluginData(const Page*);
- void initPlugins(const Page*);
- const PluginInfo* pluginInfoForMimeType(const String& mimeType) const;
-
+ explicit PluginData(Page&);
+ void initPlugins();
+ bool getPluginInfoForWebVisibleMimeType(const String& mimeType, PluginInfo&) const;
+ void getMimesAndPluginIndices(Vector<MimeClassInfo>&, Vector<size_t>&) const;
+ void getMimesAndPluginIndiciesForPlugins(const Vector<PluginInfo>&, Vector<MimeClassInfo>&, Vector<size_t>&) const;
+
+protected:
+ Page& m_page;
Vector<PluginInfo> m_plugins;
- Vector<MimeClassInfo> m_mimes;
- Vector<size_t> m_mimePluginIndices;
};
-}
-
-#endif
+} // namespace WebCore