Index: webkit/glue/plugins/plugin_list.h |
diff --git a/webkit/glue/plugins/plugin_list.h b/webkit/glue/plugins/plugin_list.h |
index 101e6b7a4674a1ad235be6a814f23c02c5b2cf3b..734cc6d7286693456b0704c2b5711190cba81e1c 100644 |
--- a/webkit/glue/plugins/plugin_list.h |
+++ b/webkit/glue/plugins/plugin_list.h |
@@ -5,11 +5,9 @@ |
#ifndef WEBKIT_GLUE_PLUGINS_PLUGIN_LIST_H_ |
#define WEBKIT_GLUE_PLUGINS_PLUGIN_LIST_H_ |
-#include <map> |
#include <set> |
#include <string> |
#include <vector> |
-#include <set> |
#include "base/basictypes.h" |
#include "base/file_path.h" |
@@ -80,6 +78,9 @@ class PluginList { |
// by a command line switch. |
static bool DebugPluginLoading(); |
+ static const PluginGroupDefinition* GetPluginGroupDefinitions(); |
+ static size_t GetPluginGroupDefinitionsSize(); |
+ |
// Returns true iff the plugin list has been loaded already. |
bool PluginsLoaded(); |
@@ -157,13 +158,28 @@ class PluginList { |
bool GetPluginInfoByPath(const FilePath& plugin_path, |
WebPluginInfo* info); |
- typedef std::map<std::string, linked_ptr<PluginGroup> > PluginMap; |
- |
- // Fill the map from identifier to plugin group for all plugin groups. If |
- // |load_if_necessary| is set, the plugins will be loaded if they haven't |
- // already been loaded, or if Refresh() has been called in the meantime; |
- // otherwise a possibly empty or stale list may be returned. |
- void GetPluginGroups(bool load_if_necessary, PluginMap* plugin_groups); |
+ // Populates the given vector with all available plugin groups. |
+ void GetPluginGroups(bool load_if_necessary, |
+ std::vector<PluginGroup>* plugin_groups); |
+ |
+ // Returns the PluginGroup corresponding to the given WebPluginInfo. If no |
+ // such group exists, it is created and added to the cache. |
+ // Beware: when calling this from the Browser process, the group that the |
+ // returned pointer points to might disappear suddenly. This happens when |
+ // |RefreshPlugins()| is called and then |LoadPlugins()| is triggered by a |
+ // call to |GetPlugins()|, |GetEnabledPlugins()|, |GetPluginInfoArray()|, |
+ // |GetPluginInfoByPath()|, or |GetPluginGroups(true, _)|. It is the caller's |
+ // responsibility to make sure this doesn't happen. |
+ const PluginGroup* GetPluginGroup(const WebPluginInfo& web_plugin_info); |
+ |
+ // Returns the name of the PluginGroup with the given identifier. |
+ // If no such group exists, an empty string is returned. |
+ string16 GetPluginGroupName(std::string identifier); |
+ |
+ // Returns the identifier string of the PluginGroup corresponding to the given |
+ // WebPluginInfo. If no such group exists, it is created and added to the |
+ // cache. |
+ std::string GetPluginGroupIdentifier(const WebPluginInfo& web_plugin_info); |
// Load a specific plugin with full path. |
void LoadPlugin(const FilePath& filename, |
@@ -198,9 +214,20 @@ class PluginList { |
~PluginList(); |
private: |
+ FRIEND_TEST_ALL_PREFIXES(PluginGroupTest, PluginGroupDefinition); |
+ |
// Constructors are private for singletons |
PluginList(); |
+ // Creates PluginGroups for the static group definitions, and adds them to |
+ // the PluginGroup cache of this PluginList. |
+ void AddHardcodedPluginGroups(); |
+ |
+ // Adds the given WebPluginInfo to its corresponding group, creating it if |
+ // necessary, and returns the group. |
+ // Callers need to protect calls to this method by a lock themselves. |
+ PluginGroup* AddToPluginGroups(const WebPluginInfo& web_plugin_info); |
+ |
// Load all plugins from the default plugins directory |
void LoadPlugins(bool refresh); |
@@ -224,10 +251,6 @@ class PluginList { |
// list of disabled groups as well. |
bool ShouldDisableGroup(const string16& group_name); |
- // Like GetPluginGroups above, but works on a given vector of plugins. |
- static void GetPluginGroups(const std::vector<WebPluginInfo>* plugins, |
- PluginMap* plugin_groups); |
- |
// Returns true if the given WebPluginInfo supports "mime-type". |
// mime_type should be all lower case. |
static bool SupportsType(const WebPluginInfo& info, |
@@ -291,11 +314,16 @@ class PluginList { |
// Path names of plugins to disable (the default is to enable them all). |
std::set<FilePath> disabled_plugins_; |
- // Group names disable (the default is to enable them all). |
+ // Group names to disable (the default is to enable them all). |
std::set<string16> disabled_groups_; |
bool disable_outdated_plugins_; |
+ // Holds the currently available plugin groups. |
+ PluginGroup::PluginMap plugin_groups_; |
+ |
+ int next_priority_; |
+ |
// Need synchronization for the above members since this object can be |
// accessed on multiple threads. |
Lock lock_; |