1 // Copyright 2019 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 #include "components/download/public/common/all_download_event_notifier.h" 6 7 namespace download { 8 AllDownloadEventNotifier(SimpleDownloadManagerCoordinator * simple_download_manager_coordinator)9AllDownloadEventNotifier::AllDownloadEventNotifier( 10 SimpleDownloadManagerCoordinator* simple_download_manager_coordinator) 11 : simple_download_manager_coordinator_(simple_download_manager_coordinator), 12 download_initialized_(false) { 13 simple_download_manager_coordinator_->AddObserver(this); 14 std::vector<DownloadItem*> downloads; 15 simple_download_manager_coordinator_->GetAllDownloads(&downloads); 16 for (auto* download : downloads) { 17 download->AddObserver(this); 18 observing_.insert(download); 19 } 20 } 21 ~AllDownloadEventNotifier()22AllDownloadEventNotifier::~AllDownloadEventNotifier() { 23 if (simple_download_manager_coordinator_) 24 simple_download_manager_coordinator_->RemoveObserver(this); 25 for (auto it = observing_.begin(); it != observing_.end(); ++it) { 26 (*it)->RemoveObserver(this); 27 } 28 observing_.clear(); 29 } 30 AddObserver(Observer * observer)31void AllDownloadEventNotifier::AddObserver(Observer* observer) { 32 observers_.AddObserver(observer); 33 if (download_initialized_) { 34 observer->OnDownloadsInitialized( 35 simple_download_manager_coordinator_, 36 !simple_download_manager_coordinator_->has_all_history_downloads()); 37 } 38 } 39 RemoveObserver(Observer * observer)40void AllDownloadEventNotifier::RemoveObserver(Observer* observer) { 41 observers_.RemoveObserver(observer); 42 } 43 OnDownloadsInitialized(bool active_downloads_only)44void AllDownloadEventNotifier::OnDownloadsInitialized( 45 bool active_downloads_only) { 46 download_initialized_ = true; 47 for (auto& observer : observers_) 48 observer.OnDownloadsInitialized(simple_download_manager_coordinator_, 49 active_downloads_only); 50 } 51 OnManagerGoingDown(SimpleDownloadManagerCoordinator * manager)52void AllDownloadEventNotifier::OnManagerGoingDown( 53 SimpleDownloadManagerCoordinator* manager) { 54 DCHECK_EQ(manager, simple_download_manager_coordinator_); 55 for (auto& observer : observers_) 56 observer.OnManagerGoingDown(simple_download_manager_coordinator_); 57 simple_download_manager_coordinator_->RemoveObserver(this); 58 simple_download_manager_coordinator_ = nullptr; 59 } 60 OnDownloadCreated(DownloadItem * item)61void AllDownloadEventNotifier::OnDownloadCreated(DownloadItem* item) { 62 if (observing_.find(item) != observing_.end()) 63 return; 64 item->AddObserver(this); 65 observing_.insert(item); 66 for (auto& observer : observers_) 67 observer.OnDownloadCreated(simple_download_manager_coordinator_, item); 68 } 69 OnDownloadUpdated(DownloadItem * item)70void AllDownloadEventNotifier::OnDownloadUpdated(DownloadItem* item) { 71 for (auto& observer : observers_) 72 observer.OnDownloadUpdated(simple_download_manager_coordinator_, item); 73 } 74 OnDownloadOpened(DownloadItem * item)75void AllDownloadEventNotifier::OnDownloadOpened(DownloadItem* item) { 76 for (auto& observer : observers_) 77 observer.OnDownloadOpened(simple_download_manager_coordinator_, item); 78 } 79 OnDownloadRemoved(DownloadItem * item)80void AllDownloadEventNotifier::OnDownloadRemoved(DownloadItem* item) { 81 for (auto& observer : observers_) 82 observer.OnDownloadRemoved(simple_download_manager_coordinator_, item); 83 } 84 OnDownloadDestroyed(DownloadItem * item)85void AllDownloadEventNotifier::OnDownloadDestroyed(DownloadItem* item) { 86 item->RemoveObserver(this); 87 observing_.erase(item); 88 } 89 90 } // namespace download 91