diff options
Diffstat (limited to 'chrome/common/plugin_group.cc')
-rw-r--r-- | chrome/common/plugin_group.cc | 106 |
1 files changed, 58 insertions, 48 deletions
diff --git a/chrome/common/plugin_group.cc b/chrome/common/plugin_group.cc index 6297466..a4930146 100644 --- a/chrome/common/plugin_group.cc +++ b/chrome/common/plugin_group.cc @@ -6,6 +6,7 @@ #include "base/linked_ptr.h" #include "base/string_util.h" +#include "base/sys_string_conversions.h" #include "base/utf_string_conversions.h" #include "base/values.h" #include "base/version.h" @@ -18,19 +19,19 @@ // (new versions) are published. // TODO(panayiotis): Get the Real Player version on Mac, somehow. static const PluginGroupDefinition kGroupDefinitions[] = { - { "Quicktime", "QuickTime Plug-in", "", "", "7.6.6", + { "apple-quicktime", "Quicktime", "QuickTime Plug-in", "", "", "7.6.6", "http://www.apple.com/quicktime/download/" }, - { "Java", "Java", "", "", "", + { "java-runtime-environment", "Java", "Java", "", "", "", "http://support.apple.com/kb/HT1338" }, - { "Flash", "Shockwave Flash", "", "", "10.1.82", + { "adobe-flash-player", "Flash", "Shockwave Flash", "", "", "10.1.82", "http://get.adobe.com/flashplayer/" }, - { "Silverlight 3", "Silverlight", "0", "4", "3.0.50106.0", + { "silverlight-3", "Silverlight 3", "Silverlight", "0", "4", "3.0.50106.0", "http://go.microsoft.com/fwlink/?LinkID=185927" }, - { "Silverlight 4", "Silverlight", "4", "5", "", + { "silverlight-4", "Silverlight 4", "Silverlight", "4", "5", "", "http://go.microsoft.com/fwlink/?LinkID=185927" }, - { "Flip4Mac", "Flip4Mac", "", "", "2.2.1", + { "flip4mac", "Flip4Mac", "Flip4Mac", "", "", "2.2.1", "http://www.telestream.net/flip4mac-wmv/overview.htm" }, - { "Shockwave", "Shockwave for Director", "", "", "11.5.8.612", + { "shockwave", "Shockwave", "Shockwave for Director", "", "", "11.5.8.612", "http://www.adobe.com/shockwave/download/" } }; @@ -38,31 +39,34 @@ static const PluginGroupDefinition kGroupDefinitions[] = { // TODO(panayiotis): We should group "RealJukebox NS Plugin" with the rest of // the RealPlayer files. static const PluginGroupDefinition kGroupDefinitions[] = { - { "Quicktime", "QuickTime Plug-in", "", "", "7.6.7", + { "apple-quicktime", "Quicktime", "QuickTime Plug-in", "", "", "7.6.7", "http://www.apple.com/quicktime/download/" }, - { "Java 6", "Java", "", "6", "6.0.200", + { "java-runtime-environment", "Java 6", "Java", "", "6", "6.0.200", "http://www.java.com/" }, - { "Adobe Reader 9", "Adobe Acrobat", "9", "10", "9.3.3", + { "adobe-reader", "Adobe Reader 9", "Adobe Acrobat", "9", "10", "9.3.3", "http://get.adobe.com/reader/" }, - { "Adobe Reader 8", "Adobe Acrobat", "0", "9", "8.2.3", + { "adobe-reader-8", "Adobe Reader 8", "Adobe Acrobat", "0", "9", "8.2.3", "http://get.adobe.com/reader/" }, - { "Flash", "Shockwave Flash", "", "", "10.1.82", + { "adobe-flash-player", "Flash", "Shockwave Flash", "", "", "10.1.82", "http://get.adobe.com/flashplayer/" }, - { "Silverlight 3", "Silverlight", "0", "4", "3.0.50106.0", + { "silverlight-3", "Silverlight 3", "Silverlight", "0", "4", "3.0.50106.0", "http://go.microsoft.com/fwlink/?LinkID=185927" }, - { "Silverlight 4", "Silverlight", "4", "5", "", + { "silverlight-4", "Silverlight 4", "Silverlight", "4", "5", "", "http://go.microsoft.com/fwlink/?LinkID=185927" }, - { "Shockwave", "Shockwave for Director", "", "", "11.5.8.612", + { "shockwave", "Shockwave", "Shockwave for Director", "", "", "11.5.8.612", "http://www.adobe.com/shockwave/download/" }, - { "DivX Player", "DivX Web Player", "", "", "1.4.3.4", - "http://download.divx.com/divx/autoupdate/player/DivXWebPlayerInstaller.exe" }, + { "divx-player", "DivX Player", "DivX Web Player", "", "", "1.4.3.4", + "http://download.divx.com/divx/autoupdate/player/" + "DivXWebPlayerInstaller.exe" }, // These are here for grouping, no vulnerabilies known. - { "Windows Media Player", "Windows Media Player", "", "", "", "" }, - { "Microsoft Office", "Microsoft Office", "", "", "", "" }, + { "windows-media-player", "Windows Media Player", "Windows Media Player", + "", "", "", "" }, + { "microsoft-office", "Microsoft Office", "Microsoft Office", + "", "", "", "" }, // TODO(panayiotis): The vulnerable versions are // (v >= 6.0.12.1040 && v <= 6.0.12.1663) // || v == 6.0.12.1698 || v == 6.0.12.1741 - { "RealPlayer", "RealPlayer", "", "", "", + { "realplayer", "RealPlayer", "RealPlayer", "", "", "", "http://www.adobe.com/shockwave/download/" }, }; @@ -129,26 +133,25 @@ PluginGroup::PluginGroup(const string16& group_name, const std::string& version_range_low, const std::string& version_range_high, const std::string& min_version, - const std::string& update_url) { - group_name_ = group_name; - name_matcher_ = name_matcher; - version_range_low_str_ = version_range_low; - if (!version_range_low.empty()) { - version_range_low_.reset( - Version::GetVersionFromString(version_range_low)); - } - version_range_high_str_ = version_range_high; + const std::string& update_url, + const std::string& identifier) + : identifier_(identifier), + group_name_(group_name), + name_matcher_(name_matcher), + version_range_low_str_(version_range_low), + version_range_high_str_(version_range_high), + update_url_(update_url), + enabled_(false), + min_version_str_(min_version), + version_(Version::GetVersionFromString("0")) { + if (!version_range_low.empty()) + version_range_low_.reset(Version::GetVersionFromString(version_range_low)); if (!version_range_high.empty()) { version_range_high_.reset( Version::GetVersionFromString(version_range_high)); } - min_version_str_ = min_version; - if (!min_version.empty()) { + if (!min_version.empty()) min_version_.reset(Version::GetVersionFromString(min_version)); - } - update_url_ = update_url; - enabled_ = false; - version_.reset(Version::GetVersionFromString("0")); } PluginGroup* PluginGroup::FromPluginGroupDefinition( @@ -158,27 +161,35 @@ PluginGroup* PluginGroup::FromPluginGroupDefinition( definition.version_matcher_low, definition.version_matcher_high, definition.min_version, - definition.update_url); + definition.update_url, + definition.identifier); } PluginGroup::~PluginGroup() { } PluginGroup* PluginGroup::FromWebPluginInfo(const WebPluginInfo& wpi) { // Create a matcher from the name of this plugin. - return new PluginGroup(wpi.name, wpi.name, - "", "", "", ""); +#if defined(OS_POSIX) + std::string identifier = wpi.path.BaseName().value(); +#elif defined(OS_WIN) + std::string identifier = base::SysWideToUTF8(wpi.path.BaseName().value()); +#endif + return new PluginGroup(wpi.name, wpi.name, std::string(), std::string(), + std::string(), std::string(), identifier); } -PluginGroup* PluginGroup::FindHardcodedPluginGroup(const WebPluginInfo& info) { - static std::vector<linked_ptr<PluginGroup> >* hardcoded_plugin_groups = NULL; +PluginGroup* PluginGroup::CopyOrCreatePluginGroup( + const WebPluginInfo& info) { + static PluginMap* hardcoded_plugin_groups = NULL; if (!hardcoded_plugin_groups) { - std::vector<linked_ptr<PluginGroup> >* groups = - new std::vector<linked_ptr<PluginGroup> >(); + PluginMap* groups = new PluginMap(); const PluginGroupDefinition* definitions = GetPluginGroupDefinitions(); for (size_t i = 0; i < GetPluginGroupDefinitionsSize(); ++i) { PluginGroup* definition_group = PluginGroup::FromPluginGroupDefinition( definitions[i]); - groups->push_back(linked_ptr<PluginGroup>(definition_group)); + std::string identifier = definition_group->identifier(); + DCHECK(groups->find(identifier) == groups->end()); + (*groups)[identifier] = linked_ptr<PluginGroup>(definition_group); } hardcoded_plugin_groups = groups; } @@ -196,15 +207,14 @@ PluginGroup* PluginGroup::FindHardcodedPluginGroup(const WebPluginInfo& info) { } PluginGroup* PluginGroup::FindGroupMatchingPlugin( - std::vector<linked_ptr<PluginGroup> >& plugin_groups, + const PluginMap& plugin_groups, const WebPluginInfo& plugin) { - for (std::vector<linked_ptr<PluginGroup> >::iterator it = + for (std::map<std::string, linked_ptr<PluginGroup> >::const_iterator it = plugin_groups.begin(); it != plugin_groups.end(); ++it) { - if ((*it)->Match(plugin)) { - return it->get(); - } + if (it->second->Match(plugin)) + return it->second.get(); } return NULL; } |