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_ |