| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    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 |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #ifndef CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_ |    5 #ifndef CHROME_BROWSER_PLUGINS_PLUGIN_METADATA_H_ | 
|    6 #define CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_ |    6 #define CHROME_BROWSER_PLUGINS_PLUGIN_METADATA_H_ | 
|    7  |    7  | 
|    8 #include "base/observer_list.h" |    8 #include <map> | 
 |    9  | 
|    9 #include "base/string16.h" |   10 #include "base/string16.h" | 
|   10 #include "base/version.h" |   11 #include "base/version.h" | 
|   11 #include "googleurl/src/gurl.h" |   12 #include "googleurl/src/gurl.h" | 
|   12 #include "content/public/browser/download_id.h" |  | 
|   13 #include "content/public/browser/download_item.h" |  | 
|   14 #include "net/base/net_errors.h" |  | 
|   15  |  | 
|   16 class FilePath; |  | 
|   17 class PluginInstallerObserver; |  | 
|   18 class TabContents; |  | 
|   19 class WeakPluginInstallerObserver; |  | 
|   20  |  | 
|   21 namespace content { |  | 
|   22 class WebContents; |  | 
|   23 } |  | 
|   24  |   13  | 
|   25 namespace webkit { |   14 namespace webkit { | 
|   26 struct WebPluginInfo; |   15 struct WebPluginInfo; | 
|   27 } |   16 } | 
|   28  |   17  | 
|   29 class PluginInstaller : public content::DownloadItem::Observer { |   18 class PluginMetadata { | 
|   30  public: |   19  public: | 
|   31   enum InstallerState { |  | 
|   32     INSTALLER_STATE_IDLE, |  | 
|   33     INSTALLER_STATE_DOWNLOADING, |  | 
|   34   }; |  | 
|   35  |  | 
|   36   // Information about a certain version of the plug-in. |   20   // Information about a certain version of the plug-in. | 
|   37   enum SecurityStatus { |   21   enum SecurityStatus { | 
|   38     SECURITY_STATUS_UP_TO_DATE, |   22     SECURITY_STATUS_UP_TO_DATE, | 
|   39     SECURITY_STATUS_OUT_OF_DATE, |   23     SECURITY_STATUS_OUT_OF_DATE, | 
|   40     SECURITY_STATUS_REQUIRES_AUTHORIZATION, |   24     SECURITY_STATUS_REQUIRES_AUTHORIZATION, | 
|   41   }; |   25   }; | 
|   42  |   26  | 
|   43   PluginInstaller(const std::string& identifier, |   27   PluginMetadata(const std::string& identifier, | 
|   44                   const string16& name, |   28                  const string16& name, | 
|   45                   bool url_for_display, |   29                  bool url_for_display, | 
|   46                   const GURL& plugin_url, |   30                  const GURL& plugin_url, | 
|   47                   const GURL& help_url, |   31                  const GURL& help_url, | 
|   48                   const string16& group_name_matcher); |   32                  const string16& group_name_matcher); | 
|   49   virtual ~PluginInstaller(); |   33   ~PluginMetadata(); | 
|   50  |  | 
|   51   virtual void OnDownloadUpdated(content::DownloadItem* download) OVERRIDE; |  | 
|   52   virtual void OnDownloadDestroyed(content::DownloadItem* download) OVERRIDE; |  | 
|   53  |  | 
|   54   void AddObserver(PluginInstallerObserver* observer); |  | 
|   55   void RemoveObserver(PluginInstallerObserver* observer); |  | 
|   56  |  | 
|   57   void AddWeakObserver(WeakPluginInstallerObserver* observer); |  | 
|   58   void RemoveWeakObserver(WeakPluginInstallerObserver* observer); |  | 
|   59  |   34  | 
|   60   // Unique identifier for the plug-in. |   35   // Unique identifier for the plug-in. | 
|   61   const std::string& identifier() const { return identifier_; } |   36   const std::string& identifier() const { return identifier_; } | 
|   62  |   37  | 
|   63   // Human-readable name of the plug-in. |   38   // Human-readable name of the plug-in. | 
|   64   const string16& name() const { return name_; } |   39   const string16& name() const { return name_; } | 
|   65  |   40  | 
|   66   // Checks if the plug-in matches the group matcher. |  | 
|   67   bool MatchesPlugin(const webkit::WebPluginInfo& plugin); |  | 
|   68  |  | 
|   69   // If |url_for_display| is false, |plugin_url| is the URL of the download page |   41   // If |url_for_display| is false, |plugin_url| is the URL of the download page | 
|   70   // for the plug-in, which should be opened in a new tab. If it is true, |   42   // for the plug-in, which should be opened in a new tab. If it is true, | 
|   71   // |plugin_url| is the URL of the plug-in installer binary, which can be |   43   // |plugin_url| is the URL of the plug-in installer binary, which can be | 
|   72   // directly downloaded. |   44   // directly downloaded. | 
|   73   bool url_for_display() const { return url_for_display_; } |   45   bool url_for_display() const { return url_for_display_; } | 
|   74   const GURL& plugin_url() const { return plugin_url_; } |   46   const GURL& plugin_url() const { return plugin_url_; } | 
|   75  |   47  | 
|   76   // URL to open when the user clicks on the "Problems installing?" link. |   48   // URL to open when the user clicks on the "Problems installing?" link. | 
|   77   const GURL& help_url() const { return help_url_; } |   49   const GURL& help_url() const { return help_url_; } | 
|   78  |   50  | 
|   79   InstallerState state() const { return state_; } |  | 
|   80  |  | 
|   81   // Adds information about a plug-in version. |   51   // Adds information about a plug-in version. | 
|   82   void AddVersion(const Version& version, SecurityStatus status); |   52   void AddVersion(const Version& version, SecurityStatus status); | 
|   83  |   53  | 
|   84   // Returns the security status for the given plug-in (i.e. whether it is |   54   // Checks if the plug-in matches the group matcher. | 
|   85   // considered out-of-date, etc.) |   55   bool MatchesPlugin(const webkit::WebPluginInfo& plugin); | 
|   86   SecurityStatus GetSecurityStatus(const webkit::WebPluginInfo& plugin) const; |  | 
|   87  |  | 
|   88   // Opens the download URL in a new tab. This method should only be called if |  | 
|   89   // |url_for_display| returns true. |  | 
|   90   void OpenDownloadURL(content::WebContents* web_contents); |  | 
|   91  |  | 
|   92   // Starts downloading the download URL and opens the downloaded file |  | 
|   93   // when finished. This method should only be called if |url_for_display| |  | 
|   94   // returns false. |  | 
|   95   void StartInstalling(TabContents* tab_contents); |  | 
|   96  |   56  | 
|   97   // If |status_str| describes a valid security status, writes it to |status| |   57   // If |status_str| describes a valid security status, writes it to |status| | 
|   98   // and returns true, else returns false and leaves |status| unchanged. |   58   // and returns true, else returns false and leaves |status| unchanged. | 
|   99   static bool ParseSecurityStatus(const std::string& status_str, |   59   static bool ParseSecurityStatus(const std::string& status_str, | 
|  100                                   SecurityStatus* status); |   60                                   SecurityStatus* status); | 
|  101  |   61  | 
 |   62   // Returns the security status for the given plug-in (i.e. whether it is | 
 |   63   // considered out-of-date, etc.) | 
 |   64   SecurityStatus GetSecurityStatus(const webkit::WebPluginInfo& plugin) const; | 
 |   65  | 
|  102  private: |   66  private: | 
|  103   struct VersionComparator { |   67   struct VersionComparator { | 
|  104     bool operator() (const Version& lhs, const Version& rhs) const; |   68     bool operator() (const Version& lhs, const Version& rhs) const; | 
|  105   }; |   69   }; | 
|  106  |   70  | 
|  107   void DownloadStarted(scoped_refptr<content::DownloadManager> dlm, |  | 
|  108                        content::DownloadId download_id, |  | 
|  109                        net::Error error); |  | 
|  110   void DownloadError(const std::string& msg); |  | 
|  111   void DownloadCancelled(); |  | 
|  112  |  | 
|  113   std::string identifier_; |   71   std::string identifier_; | 
|  114   string16 name_; |   72   string16 name_; | 
|  115   string16 group_name_matcher_; |   73   string16 group_name_matcher_; | 
|  116   bool url_for_display_; |   74   bool url_for_display_; | 
|  117   GURL plugin_url_; |   75   GURL plugin_url_; | 
|  118   GURL help_url_; |   76   GURL help_url_; | 
|  119   std::map<Version, SecurityStatus, VersionComparator> versions_; |   77   std::map<Version, SecurityStatus, VersionComparator> versions_; | 
|  120  |  | 
|  121   InstallerState state_; |  | 
|  122   ObserverList<PluginInstallerObserver> observers_; |  | 
|  123   ObserverList<WeakPluginInstallerObserver> weak_observers_; |  | 
|  124  |  | 
|  125   DISALLOW_COPY_AND_ASSIGN(PluginInstaller); |  | 
|  126 }; |   78 }; | 
|  127  |   79  | 
|  128 #endif  // CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_ |   80 #endif  // CHROME_BROWSER_PLUGINS_PLUGIN_METADATA_H_ | 
| OLD | NEW |