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_INSTALLER_H_
      6 #define CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_
      7 
      8 #include "base/gtest_prod_util.h"
      9 #include "base/observer_list.h"
     10 #include "base/strings/string16.h"
     11 #include "base/version.h"
     12 #include "chrome/browser/plugins/plugin_metadata.h"
     13 #include "content/public/browser/download_interrupt_reasons.h"
     14 #include "content/public/browser/download_item.h"
     15 #include "url/gurl.h"
     16 
     17 class PluginInstallerObserver;
     18 class WeakPluginInstallerObserver;
     19 
     20 namespace content {
     21 class DownloadManager;
     22 class WebContents;
     23 struct WebPluginInfo;
     24 }
     25 
     26 class PluginInstaller : public content::DownloadItem::Observer {
     27  public:
     28   enum InstallerState {
     29     INSTALLER_STATE_IDLE,
     30     INSTALLER_STATE_DOWNLOADING,
     31   };
     32 
     33   PluginInstaller();
     34   virtual ~PluginInstaller();
     35 
     36   virtual void OnDownloadUpdated(content::DownloadItem* download) OVERRIDE;
     37   virtual void OnDownloadDestroyed(content::DownloadItem* download) OVERRIDE;
     38 
     39   void AddObserver(PluginInstallerObserver* observer);
     40   void RemoveObserver(PluginInstallerObserver* observer);
     41 
     42   void AddWeakObserver(WeakPluginInstallerObserver* observer);
     43   void RemoveWeakObserver(WeakPluginInstallerObserver* observer);
     44 
     45   InstallerState state() const { return state_; }
     46 
     47   // Opens the download URL in a new tab.
     48   void OpenDownloadURL(const GURL& plugin_url,
     49                        content::WebContents* web_contents);
     50 
     51   // Starts downloading the download URL and opens the downloaded file
     52   // when finished.
     53   void StartInstalling(const GURL& plugin_url,
     54                        content::WebContents* web_contents);
     55 
     56  private:
     57   void StartInstallingWithDownloadManager(
     58       const GURL& plugin_url,
     59       content::WebContents* web_contents,
     60       content::DownloadManager* download_manager);
     61   void DownloadStarted(content::DownloadItem* item,
     62                        content::DownloadInterruptReason interrupt_reason);
     63   void DownloadError(const std::string& msg);
     64   void DownloadCancelled();
     65 
     66   InstallerState state_;
     67   ObserverList<PluginInstallerObserver> observers_;
     68   int strong_observer_count_;
     69   ObserverList<WeakPluginInstallerObserver> weak_observers_;
     70 
     71   FRIEND_TEST_ALL_PREFIXES(PluginInstallerTest,
     72                            StartInstalling_SuccessfulDownload);
     73   FRIEND_TEST_ALL_PREFIXES(PluginInstallerTest, StartInstalling_FailedStart);
     74   FRIEND_TEST_ALL_PREFIXES(PluginInstallerTest, StartInstalling_Interrupted);
     75   DISALLOW_COPY_AND_ASSIGN(PluginInstaller);
     76 };
     77 
     78 #endif  // CHROME_BROWSER_PLUGINS_PLUGIN_INSTALLER_H_
     79