Home | History | Annotate | Download | only in plugins
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_PLUGINS_PLUGIN_METADATA_H_
      6 #define CHROME_BROWSER_PLUGINS_PLUGIN_METADATA_H_
      7 
      8 #include <map>
      9 
     10 #include "base/memory/scoped_ptr.h"
     11 #include "base/strings/string16.h"
     12 #include "base/version.h"
     13 #include "url/gurl.h"
     14 
     15 namespace content {
     16 struct WebPluginInfo;
     17 }
     18 
     19 class PluginMetadata {
     20  public:
     21   // Information about a certain version of the plug-in.
     22   enum SecurityStatus {
     23     SECURITY_STATUS_UP_TO_DATE,
     24     SECURITY_STATUS_OUT_OF_DATE,
     25     SECURITY_STATUS_REQUIRES_AUTHORIZATION,
     26   };
     27 
     28   // Used by about:plugins to disable Reader plugin when internal PDF viewer is
     29   // enabled.
     30   static const char kAdobeReaderGroupName[];
     31   static const char kJavaGroupName[];
     32   static const char kQuickTimeGroupName[];
     33   static const char kShockwaveGroupName[];
     34   static const char kRealPlayerGroupName[];
     35   static const char kSilverlightGroupName[];
     36   static const char kWindowsMediaPlayerGroupName[];
     37 
     38   PluginMetadata(const std::string& identifier,
     39                  const string16& name,
     40                  bool url_for_display,
     41                  const GURL& plugin_url,
     42                  const GURL& help_url,
     43                  const string16& group_name_matcher,
     44                  const std::string& language);
     45   ~PluginMetadata();
     46 
     47   // Unique identifier for the plug-in.
     48   const std::string& identifier() const { return identifier_; }
     49 
     50   // Human-readable name of the plug-in.
     51   const string16& name() const { return name_; }
     52 
     53   // If |url_for_display| is false, |plugin_url| is the URL of the download page
     54   // for the plug-in, which should be opened in a new tab. If it is true,
     55   // |plugin_url| is the URL of the plug-in installer binary, which can be
     56   // directly downloaded.
     57   bool url_for_display() const { return url_for_display_; }
     58   const GURL& plugin_url() const { return plugin_url_; }
     59 
     60   // URL to open when the user clicks on the "Problems installing?" link.
     61   const GURL& help_url() const { return help_url_; }
     62 
     63   const std::string& language() const { return language_; }
     64 
     65   bool HasMimeType(const std::string& mime_type) const;
     66   void AddMimeType(const std::string& mime_type);
     67   void AddMatchingMimeType(const std::string& mime_type);
     68 
     69   // Adds information about a plug-in version.
     70   void AddVersion(const Version& version, SecurityStatus status);
     71 
     72   // Checks if |plugin| mime types match all |matching_mime_types_|.
     73   // If there is no |matching_mime_types_|, |group_name_matcher_| is used
     74   // for matching.
     75   bool MatchesPlugin(const content::WebPluginInfo& plugin);
     76 
     77   // If |status_str| describes a valid security status, writes it to |status|
     78   // and returns true, else returns false and leaves |status| unchanged.
     79   static bool ParseSecurityStatus(const std::string& status_str,
     80                                   SecurityStatus* status);
     81 
     82   // Returns the security status for the given plug-in (i.e. whether it is
     83   // considered out-of-date, etc.)
     84   SecurityStatus GetSecurityStatus(const content::WebPluginInfo& plugin) const;
     85 
     86   scoped_ptr<PluginMetadata> Clone() const;
     87 
     88  private:
     89   struct VersionComparator {
     90     bool operator() (const Version& lhs, const Version& rhs) const;
     91   };
     92 
     93   std::string identifier_;
     94   string16 name_;
     95   string16 group_name_matcher_;
     96   bool url_for_display_;
     97   GURL plugin_url_;
     98   GURL help_url_;
     99   std::string language_;
    100   std::map<Version, SecurityStatus, VersionComparator> versions_;
    101   std::vector<std::string> all_mime_types_;
    102   std::vector<std::string> matching_mime_types_;
    103 
    104   DISALLOW_COPY_AND_ASSIGN(PluginMetadata);
    105 };
    106 
    107 #endif  // CHROME_BROWSER_PLUGINS_PLUGIN_METADATA_H_
    108