• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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_DOWNLOAD_DOWNLOAD_UI_CONTROLLER_H_
6 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UI_CONTROLLER_H_
7 
8 #include <set>
9 
10 #include "base/memory/scoped_ptr.h"
11 #include "chrome/browser/download/all_download_item_notifier.h"
12 
13 // This class handles the task of observing a single DownloadManager for
14 // notifying the UI when a new download should be displayed in the UI.
15 // It invokes the OnNewDownloadReady() method of hte Delegate when the
16 // target path is available for a new download.
17 class DownloadUIController : public AllDownloadItemNotifier::Observer {
18  public:
19   // The delegate is responsible for figuring out how to notify the UI.
20   class Delegate {
21    public:
22     virtual ~Delegate();
23 
24     // This method is invoked to notify the UI of the new download |item|. Note
25     // that |item| may be in any state by the time this method is invoked.
26     virtual void OnNewDownloadReady(content::DownloadItem* item) = 0;
27   };
28 
29   // |manager| is the download manager to observe for new downloads. If
30   // |delegate.get()| is NULL, then the default delegate is constructed.
31   //
32   // On Android the default delegate notifies DownloadControllerAndroid. On
33   // other platforms the target of the notification is a Browser object.
34   //
35   // Currently explicit delegates are only used for testing.
36   DownloadUIController(content::DownloadManager* manager,
37                        scoped_ptr<Delegate> delegate);
38 
39   virtual ~DownloadUIController();
40 
41  private:
42   virtual void OnDownloadCreated(content::DownloadManager* manager,
43                                  content::DownloadItem* item) OVERRIDE;
44   virtual void OnDownloadUpdated(content::DownloadManager* manager,
45                                  content::DownloadItem* item) OVERRIDE;
46 
47   AllDownloadItemNotifier download_notifier_;
48 
49   scoped_ptr<Delegate> delegate_;
50 
51   DISALLOW_COPY_AND_ASSIGN(DownloadUIController);
52 };
53 
54 #endif  // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UI_CONTROLLER_H_
55