| Index: chrome/browser/plugins/plugin_metadata.cc
|
| diff --git a/chrome/browser/plugins/plugin_metadata.cc b/chrome/browser/plugins/plugin_metadata.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b8dfd03e2baf6070670e125f3cfcdb5d8dffb590
|
| --- /dev/null
|
| +++ b/chrome/browser/plugins/plugin_metadata.cc
|
| @@ -0,0 +1,85 @@
|
| +// Copyright (c) 2012 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.
|
| +
|
| +#include "chrome/browser/plugins/plugin_metadata.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "webkit/plugins/npapi/plugin_utils.h"
|
| +#include "webkit/plugins/webplugininfo.h"
|
| +
|
| +PluginMetadata::PluginMetadata(const std::string& identifier,
|
| + const string16& name,
|
| + bool url_for_display,
|
| + const GURL& plugin_url,
|
| + const GURL& help_url,
|
| + const string16& group_name_matcher)
|
| + : identifier_(identifier),
|
| + name_(name),
|
| + group_name_matcher_(group_name_matcher),
|
| + url_for_display_(url_for_display),
|
| + plugin_url_(plugin_url),
|
| + help_url_(help_url) {
|
| +}
|
| +
|
| +PluginMetadata::~PluginMetadata() {
|
| +}
|
| +
|
| +void PluginMetadata::AddVersion(const Version& version,
|
| + SecurityStatus status) {
|
| + DCHECK(versions_.find(version) == versions_.end());
|
| + versions_[version] = status;
|
| +}
|
| +
|
| +bool PluginMetadata::MatchesPlugin(const webkit::WebPluginInfo& plugin) {
|
| + return plugin.name.find(group_name_matcher_) != string16::npos;
|
| +}
|
| +
|
| +// static
|
| +bool PluginMetadata::ParseSecurityStatus(
|
| + const std::string& status_str,
|
| + PluginMetadata::SecurityStatus* status) {
|
| + if (status_str == "up_to_date")
|
| + *status = SECURITY_STATUS_UP_TO_DATE;
|
| + else if (status_str == "out_of_date")
|
| + *status = SECURITY_STATUS_OUT_OF_DATE;
|
| + else if (status_str == "requires_authorization")
|
| + *status = SECURITY_STATUS_REQUIRES_AUTHORIZATION;
|
| + else
|
| + return false;
|
| +
|
| + return true;
|
| +}
|
| +
|
| +PluginMetadata::SecurityStatus PluginMetadata::GetSecurityStatus(
|
| + const webkit::WebPluginInfo& plugin) const {
|
| + if (versions_.empty()) {
|
| +#if defined(OS_LINUX)
|
| + // On Linux, unknown plugins require authorization.
|
| + return SECURITY_STATUS_REQUIRES_AUTHORIZATION;
|
| +#else
|
| + return SECURITY_STATUS_UP_TO_DATE;
|
| +#endif
|
| + }
|
| +
|
| + Version version;
|
| + webkit::npapi::CreateVersionFromString(plugin.version, &version);
|
| + if (!version.IsValid())
|
| + version = Version("0");
|
| +
|
| + // |lower_bound| returns the latest version that is not newer than |version|.
|
| + std::map<Version, SecurityStatus, VersionComparator>::const_iterator it =
|
| + versions_.lower_bound(version);
|
| + // If there is at least one version defined, everything older than the oldest
|
| + // defined version is considered out-of-date.
|
| + if (it == versions_.end())
|
| + return SECURITY_STATUS_OUT_OF_DATE;
|
| +
|
| + return it->second;
|
| +}
|
| +
|
| +bool PluginMetadata::VersionComparator::operator() (const Version& lhs,
|
| + const Version& rhs) const {
|
| + // Keep versions ordered by newest (biggest) first.
|
| + return lhs.CompareTo(rhs) > 0;
|
| +}
|
|
|