Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / plugins / plugin_installer.h
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   ~PluginInstaller() override;
35
36   void OnDownloadUpdated(content::DownloadItem* download) override;
37   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_