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