| Index: chrome/common/plugin_group.h | 
| diff --git a/chrome/common/plugin_group.h b/chrome/common/plugin_group.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..dba66ae815c760442d14f36772d88e7ad1a0515d | 
| --- /dev/null | 
| +++ b/chrome/common/plugin_group.h | 
| @@ -0,0 +1,115 @@ | 
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef CHROME_COMMON_PLUGIN_GROUP_H_ | 
| +#define CHROME_COMMON_PLUGIN_GROUP_H_ | 
| + | 
| +#include <vector> | 
| + | 
| +#include "base/linked_ptr.h" | 
| +#include "base/scoped_ptr.h" | 
| +#include "base/string16.h" | 
| +#include "base/version.h" | 
| +#include "webkit/glue/plugins/webplugininfo.h" | 
| + | 
| +class DictionaryValue; | 
| + | 
| +// Hard-coded definitions of plugin groups. | 
| +struct PluginGroupDefinition { | 
| +  const char* name;  // Name of this group. | 
| +  const char* name_matcher;  // Substring matcher for the plugin name. | 
| +  const char* version_matcher_low;  // Matchers for the plugin version. | 
| +  const char* version_matcher_high; | 
| +  const char* min_version;  // Minimum secure version. | 
| +  const char* update_url;  // Location of latest secure version. | 
| +}; | 
| + | 
| + | 
| +// A PluginGroup contains at least one WebPluginInfo. | 
| +// In addition, it knows if the plugin is critically vulnerable. | 
| +class PluginGroup { | 
| + public: | 
| +  // Creates a PluginGroup from a PluginGroupDefinition. | 
| +  static PluginGroup* FromPluginGroupDefinition( | 
| +      const PluginGroupDefinition& definition); | 
| + | 
| +  // Creates a PluginGroup from a WebPluginInfo -- when no hard-coded | 
| +  // definition is found. | 
| +  static PluginGroup* FromWebPluginInfo(const WebPluginInfo& wpi); | 
| + | 
| +  // Find a plugin group matching |info| in the list of hardcoded plugins. | 
| +  static PluginGroup* FindHardcodedPluginGroup(const WebPluginInfo& info); | 
| + | 
| +  // Find the PluginGroup matching a Plugin in a list of plugin groups. Returns | 
| +  // NULL if no matching PluginGroup is found. | 
| +  static PluginGroup* FindGroupMatchingPlugin( | 
| +      std::vector<linked_ptr<PluginGroup> >& plugin_groups, | 
| +      const WebPluginInfo& plugin); | 
| + | 
| +  // Creates a copy of this plugin group. | 
| +  PluginGroup* Copy() { | 
| +    return new PluginGroup(group_name_, name_matcher_, version_range_low_str_, | 
| +                           version_range_high_str_, min_version_str_, | 
| +                           update_url_); | 
| +  } | 
| + | 
| +  // Returns true if the given plugin matches this group. | 
| +  bool Match(const WebPluginInfo& plugin) const; | 
| + | 
| +  // Adds the given plugin to this group. Provide the position of the | 
| +  // plugin as given by PluginList so we can display its priority. | 
| +  void AddPlugin(const WebPluginInfo& plugin, int position); | 
| + | 
| +  // Enables/disables this group. This enables/disables all plugins in the | 
| +  // group. | 
| +  void Enable(bool enable); | 
| + | 
| +  // Returns this group's name | 
| +  const string16 GetGroupName() const { return group_name_; } | 
| + | 
| +  // Returns a DictionaryValue with data to display in the UI. | 
| +  DictionaryValue* GetDataForUI() const; | 
| + | 
| +  // Returns a DictionaryValue with data to save in the preferences. | 
| +  DictionaryValue* GetSummary() const; | 
| + | 
| +  // Returns the update URL. | 
| +  std::string GetUpdateURL() const { return update_url_; } | 
| + | 
| +  // Returns true if the latest plugin in this group has known | 
| +  // security problems. | 
| +  bool IsVulnerable() const; | 
| + | 
| + private: | 
| +  FRIEND_TEST_ALL_PREFIXES(PluginGroupTest, PluginGroupDefinition); | 
| + | 
| +  static const PluginGroupDefinition* GetPluginGroupDefinitions(); | 
| +  static size_t GetPluginGroupDefinitionsSize(); | 
| + | 
| +  PluginGroup(const string16& group_name, | 
| +              const string16& name_matcher, | 
| +              const std::string& version_range_low, | 
| +              const std::string& version_range_high, | 
| +              const std::string& min_version, | 
| +              const std::string& update_url); | 
| + | 
| +  string16 group_name_; | 
| +  string16 name_matcher_; | 
| +  std::string version_range_low_str_; | 
| +  std::string version_range_high_str_; | 
| +  scoped_ptr<Version> version_range_low_; | 
| +  scoped_ptr<Version> version_range_high_; | 
| +  string16 description_; | 
| +  std::string update_url_; | 
| +  bool enabled_; | 
| +  std::string min_version_str_; | 
| +  scoped_ptr<Version> min_version_; | 
| +  scoped_ptr<Version> max_version_; | 
| +  std::vector<WebPluginInfo> web_plugin_infos_; | 
| +  std::vector<int> web_plugin_positions_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(PluginGroup); | 
| +}; | 
| + | 
| +#endif  // CHROME_COMMON_PLUGIN_GROUP_H_ | 
|  |