Index: webkit/glue/plugins/plugin_group.cc |
diff --git a/webkit/glue/plugins/plugin_group.cc b/webkit/glue/plugins/plugin_group.cc |
index e68649c646340614bcf02ce05724475a3fe4d7c1..2422c9b81a7e6b01eb8f77a67b201207b702efc2 100644 |
--- a/webkit/glue/plugins/plugin_group.cc |
+++ b/webkit/glue/plugins/plugin_group.cc |
@@ -16,82 +16,10 @@ |
const char* PluginGroup::kAdobeReader8GroupName = "Adobe Reader 8"; |
const char* PluginGroup::kAdobeReader9GroupName = "Adobe Reader 9"; |
-#if defined(OS_MACOSX) |
-// Plugin Groups for Mac. |
-// Plugins are listed here as soon as vulnerabilities and solutions |
-// (new versions) are published. |
-// TODO(panayiotis): Get the Real Player version on Mac, somehow. |
-static const PluginGroupDefinition kGroupDefinitions[] = { |
- { "apple-quicktime", "Quicktime", "QuickTime Plug-in", "", "", "7.6.6", |
- "http://www.apple.com/quicktime/download/" }, |
- { "java-runtime-environment", "Java", "Java", "", "", "", |
- "http://support.apple.com/kb/HT1338" }, |
- { "adobe-flash-player", "Flash", "Shockwave Flash", "", "", "10.1.102", |
- "http://get.adobe.com/flashplayer/" }, |
- { "silverlight-3", "Silverlight 3", "Silverlight", "0", "4", "3.0.50106.0", |
- "http://www.microsoft.com/getsilverlight/" }, |
- { "silverlight-4", "Silverlight 4", "Silverlight", "4", "5", "", |
- "http://www.microsoft.com/getsilverlight/" }, |
- { "flip4mac", "Flip4Mac", "Flip4Mac", "", "", "2.2.1", |
- "http://www.telestream.net/flip4mac-wmv/overview.htm" }, |
- { "shockwave", "Shockwave", "Shockwave for Director", "", "", "11.5.9.615", |
- "http://www.adobe.com/shockwave/download/" } |
-}; |
- |
-#elif defined(OS_WIN) |
-// TODO(panayiotis): We should group "RealJukebox NS Plugin" with the rest of |
-// the RealPlayer files. |
-static const PluginGroupDefinition kGroupDefinitions[] = { |
- { "apple-quicktime", "Quicktime", "QuickTime Plug-in", "", "", "7.6.8", |
- "http://www.apple.com/quicktime/download/" }, |
- { "java-runtime-environment", "Java 6", "Java", "", "6", "6.0.220", |
- "http://www.java.com/" }, |
- { "adobe-reader", PluginGroup::kAdobeReader9GroupName, "Adobe Acrobat", "9", |
- "10", "9.4.1", "http://get.adobe.com/reader/" }, |
- { "adobe-reader-8", PluginGroup::kAdobeReader8GroupName, "Adobe Acrobat", "0", |
- "9", "8.2.5", "http://get.adobe.com/reader/" }, |
- { "adobe-flash-player", "Flash", "Shockwave Flash", "", "", "10.1.102", |
- "http://get.adobe.com/flashplayer/" }, |
- { "silverlight-3", "Silverlight 3", "Silverlight", "0", "4", "3.0.50106.0", |
- "http://www.microsoft.com/getsilverlight/" }, |
- { "silverlight-4", "Silverlight 4", "Silverlight", "4", "5", "", |
- "http://www.microsoft.com/getsilverlight/" }, |
- { "shockwave", "Shockwave", "Shockwave for Director", "", "", "11.5.9.615", |
- "http://www.adobe.com/shockwave/download/" }, |
- { "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", "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", "", "", "", |
- "http://www.adobe.com/shockwave/download/" }, |
-}; |
- |
-#else |
-static const PluginGroupDefinition kGroupDefinitions[] = {}; |
-#endif |
- |
/*static*/ |
std::set<string16>* PluginGroup::policy_disabled_plugin_patterns_; |
/*static*/ |
-const PluginGroupDefinition* PluginGroup::GetPluginGroupDefinitions() { |
- return kGroupDefinitions; |
-} |
- |
-/*static*/ |
-size_t PluginGroup::GetPluginGroupDefinitionsSize() { |
- // TODO(viettrungluu): |arraysize()| doesn't work with zero-size arrays. |
- return ARRAYSIZE_UNSAFE(kGroupDefinitions); |
-} |
- |
-/*static*/ |
void PluginGroup::SetPolicyDisabledPluginPatterns( |
const std::set<string16>& set) { |
if (!policy_disabled_plugin_patterns_) |
@@ -157,6 +85,38 @@ PluginGroup::PluginGroup(const string16& group_name, |
min_version_.reset(Version::GetVersionFromString(min_version)); |
} |
+void PluginGroup::InitFrom(const PluginGroup& other) { |
+ identifier_ = other.identifier_; |
+ group_name_ = other.group_name_; |
+ name_matcher_ = other.name_matcher_; |
+ version_range_low_str_ = other.version_range_low_str_; |
+ version_range_high_str_ = other.version_range_high_str_; |
+ version_range_low_.reset( |
+ Version::GetVersionFromString(version_range_low_str_)); |
+ version_range_high_.reset( |
+ Version::GetVersionFromString(version_range_high_str_)); |
+ description_ = other.description_; |
+ update_url_ = other.update_url_; |
+ enabled_ = other.enabled_; |
+ min_version_str_ = other.min_version_str_; |
+ min_version_.reset(Version::GetVersionFromString(min_version_str_)); |
+ DCHECK(other.web_plugin_infos_.size() == other.web_plugin_positions_.size()); |
Bernhard Bauer
2010/12/07 12:09:51
Nit: Use DCHECK_EQ(expected, actual) for nicer err
Jakob Kummerow
2010/12/07 17:08:56
Done.
|
+ for (size_t i = 0; i < other.web_plugin_infos_.size(); ++i) |
+ AddPlugin(other.web_plugin_infos_[i], other.web_plugin_positions_[i]); |
+ if (!version_.get()) |
+ version_.reset(Version::GetVersionFromString("0")); |
+} |
+ |
+PluginGroup::PluginGroup(const PluginGroup& other) { |
+ InitFrom(other); |
+} |
+ |
+PluginGroup& PluginGroup::operator=(const PluginGroup& other) { |
+ InitFrom(other); |
+ return *this; |
+} |
+ |
+/*static*/ |
PluginGroup* PluginGroup::FromPluginGroupDefinition( |
const PluginGroupDefinition& definition) { |
return new PluginGroup(ASCIIToUTF16(definition.name), |
@@ -170,56 +130,30 @@ PluginGroup* PluginGroup::FromPluginGroupDefinition( |
PluginGroup::~PluginGroup() { } |
-PluginGroup* PluginGroup::FromWebPluginInfo(const WebPluginInfo& wpi) { |
- // Create a matcher from the name of this plugin. |
+/*static*/ |
+std::string PluginGroup::GetIdentifier(const WebPluginInfo& wpi) { |
#if defined(OS_POSIX) |
- std::string identifier = wpi.path.BaseName().value(); |
+ return wpi.path.BaseName().value(); |
#elif defined(OS_WIN) |
- std::string identifier = base::SysWideToUTF8(wpi.path.BaseName().value()); |
+ return 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::CopyOrCreatePluginGroup( |
- const WebPluginInfo& info) { |
- static PluginMap* hardcoded_plugin_groups = NULL; |
- if (!hardcoded_plugin_groups) { |
- PluginMap* groups = new PluginMap(); |
- const PluginGroupDefinition* definitions = GetPluginGroupDefinitions(); |
- for (size_t i = 0; i < GetPluginGroupDefinitionsSize(); ++i) { |
- PluginGroup* definition_group = PluginGroup::FromPluginGroupDefinition( |
- definitions[i]); |
- std::string identifier = definition_group->identifier(); |
- DCHECK(groups->find(identifier) == groups->end()); |
- (*groups)[identifier] = linked_ptr<PluginGroup>(definition_group); |
- } |
- hardcoded_plugin_groups = groups; |
- } |
- |
- // See if this plugin matches any of the hardcoded groups. |
- PluginGroup* hardcoded_group = FindGroupMatchingPlugin( |
- *hardcoded_plugin_groups, info); |
- if (hardcoded_group) { |
- // Make a copy. |
- return hardcoded_group->Copy(); |
- } else { |
- // Not found in our hardcoded list, create a new one. |
- return PluginGroup::FromWebPluginInfo(info); |
- } |
+/*static*/ |
+std::string PluginGroup::GetLongIdentifier(const WebPluginInfo& wpi) { |
+#if defined(OS_POSIX) |
+ return wpi.path.value(); |
+#elif defined(OS_WIN) |
+ return base::SysWideToUTF8(wpi.path.value()); |
+#endif |
} |
-PluginGroup* PluginGroup::FindGroupMatchingPlugin( |
- const PluginMap& plugin_groups, |
- const WebPluginInfo& plugin) { |
- for (std::map<std::string, linked_ptr<PluginGroup> >::const_iterator it = |
- plugin_groups.begin(); |
- it != plugin_groups.end(); |
- ++it) { |
- if (it->second->Match(plugin)) |
- return it->second.get(); |
- } |
- return NULL; |
+/*static*/ |
+PluginGroup* PluginGroup::FromWebPluginInfo(const WebPluginInfo& wpi) { |
+ // Create a matcher from the name of this plugin. |
+ return new PluginGroup(wpi.name, wpi.name, std::string(), std::string(), |
+ std::string(), std::string(), |
+ GetIdentifier(wpi)); |
} |
bool PluginGroup::Match(const WebPluginInfo& plugin) const { |
@@ -287,6 +221,15 @@ void PluginGroup::UpdateDescriptionAndVersion(const WebPluginInfo& plugin) { |
} |
void PluginGroup::AddPlugin(const WebPluginInfo& plugin, int position) { |
+ // Check if this group already contains this plugin. |
+ for (size_t i = 0; i < web_plugin_infos_.size(); ++i) { |
+ if (web_plugin_infos_[i].name == plugin.name && |
+ web_plugin_infos_[i].version == plugin.version && |
+ FilePath::CompareEqualIgnoreCase(web_plugin_infos_[i].path.value(), |
+ plugin.path.value())) { |
+ return; |
+ } |
+ } |
web_plugin_infos_.push_back(plugin); |
// The position of this plugin relative to the global list of plugins. |
web_plugin_positions_.push_back(position); |
@@ -407,13 +350,18 @@ void PluginGroup::DisableOutdatedPlugins() { |
} |
void PluginGroup::Enable(bool enable) { |
- for (std::vector<WebPluginInfo>::const_iterator it = |
+ bool enabled_plugin_exists = false; |
+ for (std::vector<WebPluginInfo>::iterator it = |
web_plugin_infos_.begin(); |
it != web_plugin_infos_.end(); ++it) { |
if (enable && !IsPluginNameDisabledByPolicy(it->name)) { |
NPAPI::PluginList::Singleton()->EnablePlugin(it->path); |
+ it->enabled = true; |
+ enabled_plugin_exists = true; |
} else { |
+ it->enabled = false; |
NPAPI::PluginList::Singleton()->DisablePlugin(it->path); |
} |
} |
+ enabled_ = enabled_plugin_exists; |
} |