| Index: webkit/glue/plugins/plugin_list.h
 | 
| diff --git a/webkit/glue/plugins/plugin_list.h b/webkit/glue/plugins/plugin_list.h
 | 
| index 734cc6d7286693456b0704c2b5711190cba81e1c..890984fb72ac64b351479dcb29bedab4afc219ca 100644
 | 
| --- a/webkit/glue/plugins/plugin_list.h
 | 
| +++ b/webkit/glue/plugins/plugin_list.h
 | 
| @@ -5,8 +5,10 @@
 | 
|  #ifndef WEBKIT_GLUE_PLUGINS_PLUGIN_LIST_H_
 | 
|  #define WEBKIT_GLUE_PLUGINS_PLUGIN_LIST_H_
 | 
|  
 | 
| +#include <map>
 | 
|  #include <set>
 | 
|  #include <string>
 | 
| +#include <utility>
 | 
|  #include <vector>
 | 
|  
 | 
|  #include "base/basictypes.h"
 | 
| @@ -71,6 +73,12 @@ struct PluginVersionInfo {
 | 
|  // This object is thread safe.
 | 
|  class PluginList {
 | 
|   public:
 | 
| +  // Enum of possible reasons for plugin or group being disabled. Used in the
 | 
| +  // |disabled_plugins_| and |disabled_groups_| maps.
 | 
| +  enum PluginDisabledReason { USER = 0, POLICY, POLICY_AND_USER };
 | 
| +  typedef std::map<FilePath, PluginDisabledReason> DisabledPlugins;
 | 
| +  typedef std::map<string16, PluginDisabledReason> DisabledGroups;
 | 
| +
 | 
|    // Gets the one instance of the PluginList.
 | 
|    static PluginList* Singleton();
 | 
|  
 | 
| @@ -183,7 +191,7 @@ class PluginList {
 | 
|  
 | 
|    // Load a specific plugin with full path.
 | 
|    void LoadPlugin(const FilePath& filename,
 | 
| -                  std::vector<WebPluginInfo>* plugins);
 | 
| +                  std::vector<WebPluginInfo*>* plugins);
 | 
|  
 | 
|    // Enable a specific plugin, specified by path. Returns |true| iff a plugin
 | 
|    // currently in the plugin list was actually enabled as a result; regardless
 | 
| @@ -195,8 +203,9 @@ class PluginList {
 | 
|    // Disable a specific plugin, specified by path. Returns |true| iff a plugin
 | 
|    // currently in the plugin list was actually disabled as a result; regardless
 | 
|    // of return value, if a plugin is found in the future with the given name, it
 | 
| -  // will be disabled.
 | 
| -  bool DisablePlugin(const FilePath& filename);
 | 
| +  // will be disabled. The boolean flag should be set to true if the plugin is
 | 
| +  // disabled by a policy and not a user.
 | 
| +  bool DisablePlugin(const FilePath& filename, bool policy_disabled);
 | 
|  
 | 
|    // 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
 | 
| @@ -211,7 +220,11 @@ class PluginList {
 | 
|    // version.
 | 
|    void DisableOutdatedPluginGroups();
 | 
|  
 | 
| -  ~PluginList();
 | 
| +  const DisabledPlugins& GetDisabledPlugins() const;
 | 
| +
 | 
| +  const DisabledGroups& GetDisabledGroups() const;
 | 
| +
 | 
| +  virtual ~PluginList();
 | 
|  
 | 
|   private:
 | 
|    FRIEND_TEST_ALL_PREFIXES(PluginGroupTest, PluginGroupDefinition);
 | 
| @@ -226,7 +239,8 @@ class PluginList {
 | 
|    // 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,
 | 
| +                                 std::vector<WebPluginInfo*>* plugins);
 | 
|  
 | 
|    // Load all plugins from the default plugins directory
 | 
|    void LoadPlugins(bool refresh);
 | 
| @@ -236,14 +250,14 @@ class PluginList {
 | 
|    // |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,
 | 
| +                          std::vector<WebPluginInfo*>* plugins,
 | 
|                            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);
 | 
| +                        std::vector<WebPluginInfo*>* 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
 | 
| @@ -286,8 +300,8 @@ class PluginList {
 | 
|  
 | 
|    // Loads plugins registered under HKCU\Software\MozillaPlugins and
 | 
|    // HKLM\Software\MozillaPlugins.
 | 
| -  void LoadPluginsFromRegistry(std::vector<WebPluginInfo>* plugins,
 | 
| -                               std::set<FilePath>* visited_plugins);
 | 
| +  void LoadPluginsFromRegistry(std::set<FilePath>* visited_plugins,
 | 
| +                               std::vector<WebPluginInfo*>* plugins);
 | 
|  #endif
 | 
|  
 | 
|    //
 | 
| @@ -300,7 +314,7 @@ class PluginList {
 | 
|    bool plugins_need_refresh_;
 | 
|  
 | 
|    // Contains information about the available plugins.
 | 
| -  std::vector<WebPluginInfo> plugins_;
 | 
| +  std::vector<WebPluginInfo*> plugins_;
 | 
|  
 | 
|    // Extra plugin paths that we want to search when loading.
 | 
|    std::vector<FilePath> extra_plugin_paths_;
 | 
| @@ -311,11 +325,15 @@ class PluginList {
 | 
|    // Holds information about internal plugins.
 | 
|    std::vector<PluginVersionInfo> internal_plugins_;
 | 
|  
 | 
| +  // An element of the disabled list saves the reason for being disabled in the
 | 
| +  // second element of the pair.
 | 
| +  typedef std::pair<FilePath, PluginDisabledReason> DisabledPluginsListElement;
 | 
|    // Path names of plugins to disable (the default is to enable them all).
 | 
| -  std::set<FilePath> disabled_plugins_;
 | 
| +  DisabledPlugins disabled_plugins_;
 | 
|  
 | 
| +  typedef std::pair<string16, PluginDisabledReason> DisabledGroupsListElement;
 | 
|    // Group names to disable (the default is to enable them all).
 | 
| -  std::set<string16> disabled_groups_;
 | 
| +  DisabledGroups disabled_groups_;
 | 
|  
 | 
|    bool disable_outdated_plugins_;
 | 
|  
 | 
| @@ -326,7 +344,7 @@ class PluginList {
 | 
|  
 | 
|    // Need synchronization for the above members since this object can be
 | 
|    // accessed on multiple threads.
 | 
| -  Lock lock_;
 | 
| +  mutable Lock lock_;
 | 
|  
 | 
|    friend struct base::DefaultLazyInstanceTraits<PluginList>;
 | 
|  
 | 
| 
 |