OLD | NEW |
---|---|
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef WEBKIT_GLUE_PLUGINS_PLUGIN_GROUP_H_ | 5 #ifndef WEBKIT_GLUE_PLUGINS_PLUGIN_GROUP_H_ |
6 #define WEBKIT_GLUE_PLUGINS_PLUGIN_GROUP_H_ | 6 #define WEBKIT_GLUE_PLUGINS_PLUGIN_GROUP_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
11 #include <string> | |
11 #include <vector> | 12 #include <vector> |
12 | 13 |
13 #include "base/gtest_prod_util.h" | 14 #include "base/gtest_prod_util.h" |
14 #include "base/scoped_ptr.h" | 15 #include "base/scoped_ptr.h" |
15 #include "base/string16.h" | 16 #include "base/string16.h" |
16 | 17 |
17 class DictionaryValue; | 18 class DictionaryValue; |
18 class FilePath; | 19 class FilePath; |
19 class Version; | 20 class Version; |
20 struct WebPluginInfo; | 21 struct WebPluginInfo; |
21 | 22 |
22 namespace NPAPI { | 23 namespace NPAPI { |
23 class PluginList; | 24 class PluginList; |
24 }; | 25 }; |
25 | 26 |
26 template <typename T> | |
27 class linked_ptr; | |
28 | |
29 // Hard-coded definitions of plugin groups. | 27 // Hard-coded definitions of plugin groups. |
30 struct PluginGroupDefinition { | 28 struct PluginGroupDefinition { |
31 const char* identifier; // Unique identifier for this group. | 29 const char* identifier; // Unique identifier for this group. |
32 const char* name; // Name of this group. | 30 const char* name; // Name of this group. |
33 const char* name_matcher; // Substring matcher for the plugin name. | 31 const char* name_matcher; // Substring matcher for the plugin name. |
34 const char* version_matcher_low; // Matchers for the plugin version. | 32 const char* version_matcher_low; // Matchers for the plugin version. |
35 const char* version_matcher_high; | 33 const char* version_matcher_high; |
36 const char* min_version; // Minimum secure version. | 34 const char* min_version; // Minimum secure version. |
37 const char* update_url; // Location of latest secure version. | 35 const char* update_url; // Location of latest secure version. |
38 }; | 36 }; |
39 | 37 |
40 // A PluginGroup can match a range of versions of a specific plugin (as defined | 38 // A PluginGroup can match a range of versions of a specific plugin (as defined |
41 // by matching a substring of its name). | 39 // by matching a substring of its name). |
42 // It contains all WebPluginInfo structs (at least one) matching its definition. | 40 // It contains all WebPluginInfo structs (at least one) matching its definition. |
43 // In addition, it knows about a security "baseline", i.e. the minimum version | 41 // In addition, it knows about a security "baseline", i.e. the minimum version |
44 // of a plugin that is needed in order not to exhibit known security | 42 // of a plugin that is needed in order not to exhibit known security |
45 // vulnerabilities. | 43 // vulnerabilities. |
46 | 44 |
47 class PluginGroup { | 45 class PluginGroup { |
48 public: | 46 public: |
49 // Used by about:plugins to disable Reader plugin when internal PDF viewer is | 47 // Used by about:plugins to disable Reader plugin when internal PDF viewer is |
50 // enabled. | 48 // enabled. |
51 static const char* kAdobeReader8GroupName; | 49 static const char* kAdobeReader8GroupName; |
52 static const char* kAdobeReader9GroupName; | 50 static const char* kAdobeReader9GroupName; |
53 | 51 |
54 typedef std::map<std::string, linked_ptr<PluginGroup> > PluginMap; | 52 typedef std::map<std::string, PluginGroup*> PluginMap; |
Bernhard Bauer
2010/12/03 16:13:28
Do we need this typedef outside of PluginGroup or
Jakob Kummerow
2010/12/06 18:21:12
Done. (Made private.)
| |
55 | 53 |
56 // Creates a PluginGroup from a PluginGroupDefinition. | 54 // Creates a PluginGroup from a PluginGroupDefinition. |
57 static PluginGroup* FromPluginGroupDefinition( | 55 static PluginGroup* FromPluginGroupDefinition( |
58 const PluginGroupDefinition& definition); | 56 const PluginGroupDefinition& definition); |
59 | 57 |
58 PluginGroup(const PluginGroup& other); | |
Bernhard Bauer
2010/12/03 16:13:28
Nit: make the single-argument constructor explicit
Jakob Kummerow
2010/12/06 18:21:12
Nope. Let me quote the style guide:
"We require al
| |
59 | |
60 ~PluginGroup(); | 60 ~PluginGroup(); |
61 | 61 |
62 // Creates a PluginGroup from a WebPluginInfo -- when no hard-coded | 62 PluginGroup& operator=(const PluginGroup& other); |
63 // definition is found. | 63 |
64 // Creates a PluginGroup from a WebPluginInfo. Should not be called externally | |
65 // except by PluginList and unit tests. | |
Bernhard Bauer
2010/12/03 16:13:28
PluginList is already a friend, so just declare th
Jakob Kummerow
2010/12/06 18:21:12
Done.
This required adding several more friend cla
| |
64 static PluginGroup* FromWebPluginInfo(const WebPluginInfo& wpi); | 66 static PluginGroup* FromWebPluginInfo(const WebPluginInfo& wpi); |
65 | 67 |
66 // Find a plugin group matching |info| in the list of hardcoded plugins and | |
67 // returns a copy of it if found, or a new group matching exactly this plugin | |
68 // otherwise. | |
69 // The caller should take ownership of the return PluginGroup. | |
70 static PluginGroup* CopyOrCreatePluginGroup(const WebPluginInfo& info); | |
71 | |
72 // Configures the set of plugin name patterns for disabling plugins via | 68 // Configures the set of plugin name patterns for disabling plugins via |
73 // enterprise configuration management. | 69 // enterprise configuration management. |
74 static void SetPolicyDisabledPluginPatterns(const std::set<string16>& set); | 70 static void SetPolicyDisabledPluginPatterns(const std::set<string16>& set); |
75 | 71 |
76 // Tests to see if a plugin is on the blacklist using its name as | 72 // Tests to see if a plugin is on the blacklist using its name as |
77 // the lookup key. | 73 // the lookup key. |
78 static bool IsPluginNameDisabledByPolicy(const string16& plugin_name); | 74 static bool IsPluginNameDisabledByPolicy(const string16& plugin_name); |
79 | 75 |
80 // Tests to see if a plugin is on the blacklist using its path as | 76 // Tests to see if a plugin is on the blacklist using its path as |
81 // the lookup key. | 77 // the lookup key. |
82 static bool IsPluginPathDisabledByPolicy(const FilePath& plugin_path); | 78 static bool IsPluginPathDisabledByPolicy(const FilePath& plugin_path); |
83 | 79 |
84 // Find the PluginGroup matching a Plugin in a list of plugin groups. Returns | |
85 // NULL if no matching PluginGroup is found. | |
86 static PluginGroup* FindGroupMatchingPlugin( | |
87 const std::map<std::string, linked_ptr<PluginGroup> >& plugin_groups, | |
88 const WebPluginInfo& plugin); | |
89 | |
90 // Creates a copy of this plugin group. | |
91 PluginGroup* Copy() { | |
92 return new PluginGroup(group_name_, name_matcher_, version_range_low_str_, | |
93 version_range_high_str_, min_version_str_, | |
94 update_url_, identifier_); | |
95 } | |
96 | |
97 // Returns true if the given plugin matches this group. | 80 // Returns true if the given plugin matches this group. |
98 bool Match(const WebPluginInfo& plugin) const; | 81 bool Match(const WebPluginInfo& plugin) const; |
99 | 82 |
100 // Adds the given plugin to this group. Provide the position of the | 83 // Adds the given plugin to this group. Provide the position of the |
101 // plugin as given by PluginList so we can display its priority. | 84 // plugin as given by PluginList so we can display its priority. |
102 void AddPlugin(const WebPluginInfo& plugin, int position); | 85 void AddPlugin(const WebPluginInfo& plugin, int position); |
103 | 86 |
104 // Enables/disables this group. This enables/disables all plugins in the | 87 // Enables/disables this group. This enables/disables all plugins in the |
105 // group. | 88 // group. |
106 void Enable(bool enable); | 89 void Enable(bool enable); |
(...skipping 23 matching lines...) Expand all Loading... | |
130 | 113 |
131 // Returns true if the highest-priority plugin in this group has known | 114 // Returns true if the highest-priority plugin in this group has known |
132 // security problems. | 115 // security problems. |
133 bool IsVulnerable() const; | 116 bool IsVulnerable() const; |
134 | 117 |
135 // Disables all plugins in this group that are older than the | 118 // Disables all plugins in this group that are older than the |
136 // minimum version. | 119 // minimum version. |
137 void DisableOutdatedPlugins(); | 120 void DisableOutdatedPlugins(); |
138 | 121 |
139 private: | 122 private: |
123 friend class NPAPI::PluginList; | |
140 FRIEND_TEST_ALL_PREFIXES(PluginGroupTest, PluginGroupDefinition); | 124 FRIEND_TEST_ALL_PREFIXES(PluginGroupTest, PluginGroupDefinition); |
141 | 125 |
142 static const PluginGroupDefinition* GetPluginGroupDefinitions(); | 126 static const PluginGroupDefinition* GetPluginGroupDefinitions(); |
143 static size_t GetPluginGroupDefinitionsSize(); | 127 static size_t GetPluginGroupDefinitionsSize(); |
144 | 128 |
129 // Generates the (short) identifier string for the given plugin. | |
130 static std::string GetIdentifier(const WebPluginInfo& wpi); | |
131 | |
132 // Generates the long identifier (based on the full file path) for the given | |
133 // plugin, to be called when the short identifier is not unique. | |
134 static std::string GetLongIdentifier(const WebPluginInfo& wpi); | |
135 | |
136 // Find the PluginGroup matching a Plugin in a list of plugin groups. Returns | |
137 // NULL if no matching PluginGroup is found. | |
138 static PluginGroup* FindGroupMatchingPlugin( | |
139 const PluginMap* plugin_groups, | |
140 const WebPluginInfo& plugin); | |
141 | |
145 PluginGroup(const string16& group_name, | 142 PluginGroup(const string16& group_name, |
146 const string16& name_matcher, | 143 const string16& name_matcher, |
147 const std::string& version_range_low, | 144 const std::string& version_range_low, |
148 const std::string& version_range_high, | 145 const std::string& version_range_high, |
149 const std::string& min_version, | 146 const std::string& min_version, |
150 const std::string& update_url, | 147 const std::string& update_url, |
151 const std::string& identifier); | 148 const std::string& identifier); |
152 | 149 |
153 Version* CreateVersionFromString(const string16& version_string); | 150 Version* CreateVersionFromString(const string16& version_string); |
154 | 151 |
(...skipping 15 matching lines...) Expand all Loading... | |
170 scoped_ptr<Version> version_range_low_; | 167 scoped_ptr<Version> version_range_low_; |
171 scoped_ptr<Version> version_range_high_; | 168 scoped_ptr<Version> version_range_high_; |
172 string16 description_; | 169 string16 description_; |
173 std::string update_url_; | 170 std::string update_url_; |
174 bool enabled_; | 171 bool enabled_; |
175 std::string min_version_str_; | 172 std::string min_version_str_; |
176 scoped_ptr<Version> min_version_; | 173 scoped_ptr<Version> min_version_; |
177 scoped_ptr<Version> version_; | 174 scoped_ptr<Version> version_; |
178 std::vector<WebPluginInfo> web_plugin_infos_; | 175 std::vector<WebPluginInfo> web_plugin_infos_; |
179 std::vector<int> web_plugin_positions_; | 176 std::vector<int> web_plugin_positions_; |
180 | |
181 DISALLOW_COPY_AND_ASSIGN(PluginGroup); | |
182 }; | 177 }; |
183 | 178 |
184 #endif // WEBKIT_GLUE_PLUGINS_PLUGIN_GROUP_H_ | 179 #endif // WEBKIT_GLUE_PLUGINS_PLUGIN_GROUP_H_ |
OLD | NEW |