• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_DOWNLOAD_ALL_DOWNLOAD_ITEM_NOTIFIER_H_
6 #define CHROME_BROWSER_DOWNLOAD_ALL_DOWNLOAD_ITEM_NOTIFIER_H_
7 
8 #include <set>
9 
10 #include "content/public/browser/download_manager.h"
11 #include "content/public/browser/download_item.h"
12 
13 // AllDownloadItemNotifier observes ALL the DownloadItems on a given
14 // DownloadManager.
15 // Clients should use GetManager() instead of storing their own pointer to the
16 // manager so that they can be sensitive to managers that have gone down.
17 
18 // Example Usage:
19 // class DownloadSystemConsumer : public AllDownloadItemNotifier::Observer {
20 //  public:
21 //   DownloadSystemConsumer(content::DownloadManager* original_manager,
22 //            content::DownloadManager* incognito_manager)
23 //     : original_notifier_(original_manager, this),
24 //       incognito_notifier_(incognito_manager, this) {
25 //   }
26 //
27 //   virtual void OnDownloadUpdated(
28 //     content::DownloadManager* manager, content::DownloadItem* item) { ... }
29 //
30 //  private:
31 //   AllDownloadItemNotifier original_notifier_;
32 //   AllDownloadItemNotifier incognito_notifier_;
33 // };
34 
35 class AllDownloadItemNotifier : public content::DownloadManager::Observer,
36                                 public content::DownloadItem::Observer {
37  public:
38   // All of the methods take the DownloadManager so that subclasses can observe
39   // multiple managers at once and easily distinguish which manager a given item
40   // belongs to.
41   class Observer {
42    public:
Observer()43     Observer() {}
~Observer()44     virtual ~Observer() {}
45 
OnDownloadCreated(content::DownloadManager * manager,content::DownloadItem * item)46     virtual void OnDownloadCreated(
47         content::DownloadManager* manager, content::DownloadItem* item) {}
OnDownloadUpdated(content::DownloadManager * manager,content::DownloadItem * item)48     virtual void OnDownloadUpdated(
49         content::DownloadManager* manager, content::DownloadItem* item) {}
OnDownloadOpened(content::DownloadManager * manager,content::DownloadItem * item)50     virtual void OnDownloadOpened(
51         content::DownloadManager* manager, content::DownloadItem* item) {}
OnDownloadRemoved(content::DownloadManager * manager,content::DownloadItem * item)52     virtual void OnDownloadRemoved(
53         content::DownloadManager* manager, content::DownloadItem* item) {}
54 
55    private:
56     DISALLOW_COPY_AND_ASSIGN(Observer);
57   };
58 
59   AllDownloadItemNotifier(content::DownloadManager* manager,
60                           Observer* observer);
61 
62   virtual ~AllDownloadItemNotifier();
63 
64   // Returns NULL if the manager has gone down.
GetManager()65   content::DownloadManager* GetManager() const { return manager_; }
66 
67  private:
68   // content::DownloadManager::Observer
69   virtual void ManagerGoingDown(content::DownloadManager* manager) OVERRIDE;
70   virtual void OnDownloadCreated(content::DownloadManager* manager,
71                                 content::DownloadItem* item) OVERRIDE;
72 
73   // content::DownloadItem::Observer
74   virtual void OnDownloadUpdated(content::DownloadItem* item) OVERRIDE;
75   virtual void OnDownloadOpened(content::DownloadItem* item) OVERRIDE;
76   virtual void OnDownloadRemoved(content::DownloadItem* item) OVERRIDE;
77   virtual void OnDownloadDestroyed(content::DownloadItem* item) OVERRIDE;
78 
79   content::DownloadManager* manager_;
80   AllDownloadItemNotifier::Observer* observer_;
81   std::set<content::DownloadItem*> observing_;
82 
83   DISALLOW_COPY_AND_ASSIGN(AllDownloadItemNotifier);
84 };
85 
86 #endif  // CHROME_BROWSER_DOWNLOAD_ALL_DOWNLOAD_ITEM_NOTIFIER_H_
87