Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / download / download_ui_controller.h
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   ~DownloadUIController() override;
40
41  private:
42   void OnDownloadCreated(content::DownloadManager* manager,
43                          content::DownloadItem* item) override;
44   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_