| Index: webkit/plugins/npapi/webplugininfo.cc
|
| diff --git a/webkit/plugins/npapi/webplugininfo.cc b/webkit/plugins/npapi/webplugininfo.cc
|
| index cd5a19f82d1d14f6473d605ee45d05ee2af63723..908a86c04dec7e7319f0ffeabe3ec67a514ab666 100644
|
| --- a/webkit/plugins/npapi/webplugininfo.cc
|
| +++ b/webkit/plugins/npapi/webplugininfo.cc
|
| @@ -4,6 +4,9 @@
|
|
|
| #include "webkit/plugins/npapi/webplugininfo.h"
|
|
|
| +#include "base/logging.h"
|
| +#include "net/base/mime_util.h"
|
| +
|
| namespace webkit {
|
| namespace npapi {
|
|
|
| @@ -11,7 +14,10 @@ WebPluginMimeType::WebPluginMimeType() {}
|
|
|
| WebPluginMimeType::~WebPluginMimeType() {}
|
|
|
| -WebPluginInfo::WebPluginInfo() : enabled(false) {}
|
| +WebPluginInfo::WebPluginInfo()
|
| + : enabled(false),
|
| + reason(USER) {
|
| +}
|
|
|
| WebPluginInfo::WebPluginInfo(const WebPluginInfo& rhs)
|
| : name(rhs.name),
|
| @@ -19,7 +25,8 @@ WebPluginInfo::WebPluginInfo(const WebPluginInfo& rhs)
|
| version(rhs.version),
|
| desc(rhs.desc),
|
| mime_types(rhs.mime_types),
|
| - enabled(rhs.enabled) {
|
| + enabled(rhs.enabled),
|
| + reason(rhs.reason) {
|
| }
|
|
|
| WebPluginInfo::~WebPluginInfo() {}
|
| @@ -31,6 +38,7 @@ WebPluginInfo& WebPluginInfo::operator=(const WebPluginInfo& rhs) {
|
| desc = rhs.desc;
|
| mime_types = rhs.mime_types;
|
| enabled = rhs.enabled;
|
| + reason = rhs.reason;
|
| return *this;
|
| }
|
|
|
| @@ -43,9 +51,90 @@ WebPluginInfo::WebPluginInfo(const string16& fake_name,
|
| version(fake_version),
|
| desc(fake_desc),
|
| mime_types(),
|
| - enabled(true) {
|
| + enabled(true),
|
| + reason(USER) {
|
| +}
|
| +
|
| +/* static */
|
| +bool WebPluginInfoUtils::Enable(WebPluginInfo* plugin,
|
| + WebPluginInfo::Reason new_reason) {
|
| + // If already enabled just upgrade the reason.
|
| + if (plugin->enabled) {
|
| + plugin->reason |= new_reason;
|
| + return true;
|
| + } else {
|
| + // Only changeable if not managed.
|
| + if (IsManaged(*plugin))
|
| + return false;
|
| + plugin->enabled = true;
|
| + plugin->reason = new_reason;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +/* static */
|
| +bool WebPluginInfoUtils::Disable(WebPluginInfo* plugin,
|
| + WebPluginInfo::Reason new_reason) {
|
| + // If already disabled just upgrade the reason.
|
| + if (!plugin->enabled) {
|
| + plugin->reason |= new_reason;
|
| + return true;
|
| + } else {
|
| + // Only changeable if not managed.
|
| + if (IsManaged(*plugin))
|
| + return false;
|
| + plugin->enabled = false;
|
| + plugin->reason = new_reason;
|
| + }
|
| + return true;
|
| +}
|
| +
|
| +/* static */
|
| +bool WebPluginInfoUtils::IsEnabled(const WebPluginInfo& plugin) {
|
| + return plugin.enabled;
|
| +}
|
| +
|
| +/* static */
|
| +bool WebPluginInfoUtils::IsManaged(const WebPluginInfo& plugin) {
|
| + return (plugin.reason & WebPluginInfo::MANAGED) != 0;
|
| +}
|
| +
|
| +/* static */
|
| +bool WebPluginInfoUtils::SupportsType(const WebPluginInfo& plugin,
|
| + const std::string& mime_type,
|
| + bool allow_wildcard) {
|
| + // Webkit will ask for a plugin to handle empty mime types.
|
| + if (mime_type.empty())
|
| + return false;
|
| +
|
| + for (size_t i = 0; i < plugin.mime_types.size(); ++i) {
|
| + const WebPluginMimeType& mime_info = plugin.mime_types[i];
|
| + if (net::MatchesMimeType(mime_info.mime_type, mime_type)) {
|
| + if (!allow_wildcard && mime_info.mime_type == "*")
|
| + continue;
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +/* static */
|
| +bool WebPluginInfoUtils::SupportsExtension(const WebPluginInfo& plugin,
|
| + const std::string& extension,
|
| + std::string* actual_mime_type) {
|
| + for (size_t i = 0; i < plugin.mime_types.size(); ++i) {
|
| + const WebPluginMimeType& mime_type = plugin.mime_types[i];
|
| + for (size_t j = 0; j < mime_type.file_extensions.size(); ++j) {
|
| + if (mime_type.file_extensions[j] == extension) {
|
| + if (actual_mime_type)
|
| + *actual_mime_type = mime_type.mime_type;
|
| + return true;
|
| + }
|
| + }
|
| + }
|
| +
|
| + return false;
|
| }
|
|
|
| } // namespace npapi
|
| } // namespace webkit
|
| -
|
|
|