Index: webkit/plugins/npapi/plugin_list.h |
diff --git a/webkit/plugins/npapi/plugin_list.h b/webkit/plugins/npapi/plugin_list.h |
index bf9865e6530ef89a09c6f7791cce044df70bf8cb..7aac764eda54f654166edc093452d0305417dd4b 100644 |
--- a/webkit/plugins/npapi/plugin_list.h |
+++ b/webkit/plugins/npapi/plugin_list.h |
@@ -7,12 +7,14 @@ |
#include <set> |
#include <string> |
+#include <utility> |
#include <vector> |
#include "base/basictypes.h" |
#include "base/file_path.h" |
#include "base/linked_ptr.h" |
#include "base/lock.h" |
+#include "base/scoped_vector.h" |
#include "third_party/npapi/bindings/nphostapi.h" |
#include "webkit/plugins/npapi/plugin_group.h" |
#include "webkit/plugins/npapi/webplugininfo.h" |
@@ -122,9 +124,6 @@ class PluginList { |
const string16& mime_type_descriptions, |
std::vector<WebPluginMimeType>* parsed_mime_types); |
- // Shutdown all plugins. Should be called at process teardown. |
- void Shutdown(); |
- |
// Get all the plugins. |
void GetPlugins(bool refresh, std::vector<WebPluginInfo>* plugins); |
@@ -176,7 +175,7 @@ class PluginList { |
// 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); |
+ string16 GetPluginGroupName(const 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 |
@@ -185,13 +184,12 @@ class PluginList { |
// Load a specific plugin with full path. |
void LoadPlugin(const FilePath& filename, |
- std::vector<WebPluginInfo>* plugins); |
+ ScopedVector<PluginGroup>* plugin_groups); |
// Enable a specific plugin, specified by path. Returns |true| iff a plugin |
// currently in the plugin list was actually enabled as a result; regardless |
// of return value, if a plugin is found in the future with the given name, it |
- // will be enabled. Note that plugins are enabled by default as far as |
- // |PluginList| is concerned. |
+ // will be enabled. |
bool EnablePlugin(const FilePath& filename); |
// Disable a specific plugin, specified by path. Returns |true| iff a plugin |
@@ -203,8 +201,7 @@ class PluginList { |
// Enable/disable a plugin group, specified by group_name. Returns |true| iff |
// a plugin currently in the plugin list was actually enabled/disabled as a |
// result; regardless of return value, if a plugin is found in the future with |
- // the given name, it will be enabled/disabled. Note that plugins are enabled |
- // by default as far as |PluginList| is concerned. |
+ // the given name, it will be enabled/disabled. |
bool EnableGroup(bool enable, const string16& name); |
// Disable all plugins groups that are known to be outdated, according to |
@@ -213,39 +210,50 @@ class PluginList { |
// version. |
void DisableOutdatedPluginGroups(); |
- ~PluginList(); |
- |
- private: |
- FRIEND_TEST_ALL_PREFIXES(PluginGroupTest, PluginGroupDefinition); |
+ virtual ~PluginList(); |
+ protected: |
// 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(); |
+ // Load all plugins from the default plugins directory |
+ virtual void LoadPlugins(bool refresh); |
+ |
+ // Allows tests to perform custom post-initialization tasks on newly created |
+ // PluginGroups. |
+ virtual void ProcessGroupAfterInitialize(PluginGroup* group) { } |
// 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); |
+ PluginGroup* AddToPluginGroups(const WebPluginInfo& web_plugin_info, |
+ ScopedVector<PluginGroup>* plugin_groups); |
- // Load all plugins from the default plugins directory |
- void LoadPlugins(bool refresh); |
+ bool plugins_loaded_; |
+ |
+ // Holds the currently available plugin groups. |
+ ScopedVector<PluginGroup> plugin_groups_; |
+ |
+ private: |
+ FRIEND_TEST_ALL_PREFIXES(PluginGroupTest, PluginGroupDefinition); |
+ |
+ // Creates PluginGroups for the static group definitions, and adds them to |
+ // the PluginGroup cache of this PluginList. |
+ void AddHardcodedPluginGroups(); |
// Load all plugins from a specific directory. |
// |plugins| is updated with loaded plugin information. |
// |visited_plugins| is updated with paths to all plugins that were considered |
// (including those we didn't load) |
void LoadPluginsFromDir(const FilePath& path, |
- std::vector<WebPluginInfo>* plugins, |
+ ScopedVector<PluginGroup>* plugin_groups, |
std::set<FilePath>* visited_plugins); |
// Returns true if we should load the given plugin, or false otherwise. |
// plugins is the list of plugins we have crawled in the current plugin |
// loading run. |
bool ShouldLoadPlugin(const WebPluginInfo& info, |
- std::vector<WebPluginInfo>* plugins); |
+ ScopedVector<PluginGroup>* plugins); |
// Return whether a plug-in group with the given name should be disabled, |
// either because it already is on the list of disabled groups, or because it |
@@ -253,21 +261,19 @@ class PluginList { |
// list of disabled groups as well. |
bool ShouldDisableGroup(const string16& group_name); |
- // Returns true if the given WebPluginInfo supports "mime-type". |
- // mime_type should be all lower case. |
- static bool SupportsType(const WebPluginInfo& info, |
- const std::string &mime_type, |
- bool allow_wildcard); |
- |
- // Returns true if the given WebPluginInfo supports a given file extension. |
- // extension should be all lower case. |
- // If mime_type is not NULL, it will be set to the mime type if found. |
- // The mime type which corresponds to the extension is optionally returned |
- // back. |
- static bool SupportsExtension(const WebPluginInfo& info, |
- const std::string &extension, |
- std::string* actual_mime_type); |
- |
+ // Returns true if the plugin supports |mime_type|. |mime_type| should be all |
+ // lower case. |
+ bool SupportsType(const WebPluginInfo& plugin, |
+ const std::string& mime_type, |
+ bool allow_wildcard); |
+ |
+ // Returns true if the given plugin supports a given file extension. |
+ // |extension| should be all lower case. If |mime_type| is not NULL, it will |
+ // be set to the MIME type if found. The MIME type which corresponds to the |
+ // extension is optionally returned back. |
+ bool SupportsExtension(const WebPluginInfo& plugin, |
+ const std::string& extension, |
+ std::string* actual_mime_type); |
// |
// Platform functions |
// |
@@ -285,7 +291,7 @@ class PluginList { |
// Loads plugins registered under HKCU\Software\MozillaPlugins and |
// HKLM\Software\MozillaPlugins. |
- void LoadPluginsFromRegistry(std::vector<WebPluginInfo>* plugins, |
+ void LoadPluginsFromRegistry(ScopedVector<PluginGroup>* plugins, |
std::set<FilePath>* visited_plugins); |
#endif |
@@ -293,14 +299,9 @@ class PluginList { |
// Internals |
// |
- bool plugins_loaded_; |
- |
// If true, we reload plugins even if they've been loaded already. |
bool plugins_need_refresh_; |
- // Contains information about the available plugins. |
- std::vector<WebPluginInfo> plugins_; |
- |
// Extra plugin paths that we want to search when loading. |
std::vector<FilePath> extra_plugin_paths_; |
@@ -314,18 +315,19 @@ class PluginList { |
// Holds information about internal plugins. |
std::vector<InternalPlugin> internal_plugins_; |
- // Path names of plugins to disable (the default is to enable them all). |
- std::set<FilePath> disabled_plugins_; |
- |
- // 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_; |
+ // The set of plugins that have been scheduled for disabled once they get |
+ // loaded. This list is used in LoadPlugins and pruned after it. Contains |
+ // plugins that were either disabled by the user (prefs are loaded before |
+ // plugins) or disabled by a policy. |
+ std::vector<FilePath> prematurely_disabled_plugins_; |
+ // Equivalent to the |prematurely_disabled_plugins_| this is the set of groups |
+ // scheduled for disabling once they appear. This list is never completely |
+ // pruned but all groups that do get created are removed from it. New groups |
+ // might get added if they should be pruned because of plugins getting removed |
+ // for example. |
+ std::vector<string16> prematurely_disabled_groups_; |
// Need synchronization for the above members since this object can be |
// accessed on multiple threads. |