Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "chrome/browser/download/download_manager.h" | 5 #include "chrome/browser/download/download_manager.h" | 
| 6 | 6 | 
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" | 
| 8 #include "app/resource_bundle.h" | 8 #include "app/resource_bundle.h" | 
| 9 #include "base/callback.h" | 9 #include "base/callback.h" | 
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" | 
| (...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 712 // Tell observers to refresh their views. | 712 // Tell observers to refresh their views. | 
| 713 NotifyModelChanged(); | 713 NotifyModelChanged(); | 
| 714 | 714 | 
| 715 delete download; | 715 delete download; | 
| 716 } | 716 } | 
| 717 | 717 | 
| 718 int DownloadManager::RemoveDownloadsBetween(const base::Time remove_begin, | 718 int DownloadManager::RemoveDownloadsBetween(const base::Time remove_begin, | 
| 719 const base::Time remove_end) { | 719 const base::Time remove_end) { | 
| 720 download_history_->RemoveEntriesBetween(remove_begin, remove_end); | 720 download_history_->RemoveEntriesBetween(remove_begin, remove_end); | 
| 721 | 721 | 
| 722 // All downloads visible to the user will be in the history, | |
| 723 // so scan that map. | |
| 722 DownloadMap::iterator it = history_downloads_.begin(); | 724 DownloadMap::iterator it = history_downloads_.begin(); | 
| 723 std::vector<DownloadItem*> pending_deletes; | 725 std::vector<DownloadItem*> pending_deletes; | 
| 724 while (it != history_downloads_.end()) { | 726 while (it != history_downloads_.end()) { | 
| 725 DownloadItem* download = it->second; | 727 DownloadItem* download = it->second; | 
| 726 DownloadItem::DownloadState state = download->state(); | 728 DownloadItem::DownloadState state = download->state(); | 
| 727 if (download->start_time() >= remove_begin && | 729 if (download->start_time() >= remove_begin && | 
| 728 (remove_end.is_null() || download->start_time() < remove_end) && | 730 (remove_end.is_null() || download->start_time() < remove_end) && | 
| 729 (state == DownloadItem::COMPLETE || | 731 (state == DownloadItem::COMPLETE || | 
| 730 state == DownloadItem::CANCELLED)) { | 732 state == DownloadItem::CANCELLED)) { | 
| 731 // Remove from the map and move to the next in the list. | 733 // Remove from the map and move to the next in the list. | 
| 732 history_downloads_.erase(it++); | 734 history_downloads_.erase(it++); | 
| 733 | 735 | 
| 734 // Also remove it from any completed dangerous downloads. | 736 // Also remove it from any completed dangerous downloads. | 
| 735 pending_deletes.push_back(download); | 737 pending_deletes.push_back(download); | 
| 736 | 738 | 
| 737 continue; | 739 continue; | 
| 738 } | 740 } | 
| 739 | 741 | 
| 740 ++it; | 742 ++it; | 
| 741 } | 743 } | 
| 742 | 744 | 
| 
 
cbentzel
2010/12/15 21:34:20
Would this be clearer if you did
if (pending_dele
 
 | |
| 745 // If we aren't deleting anything, we're done. | |
| 746 int num_deleted = static_cast<int>(pending_deletes.size()); | |
| 747 if (num_deleted == 0) | |
| 748 return num_deleted; | |
| 749 | |
| 750 // Remove the chosen downloads from the main owning container. | |
| 751 for (std::vector<DownloadItem*>::iterator it = pending_deletes.begin(); | |
| 752 it != pending_deletes.end(); it++) { | |
| 753 downloads_.erase(*it); | |
| 754 } | |
| 755 | |
| 743 // Tell observers to refresh their views. | 756 // Tell observers to refresh their views. | 
| 744 int num_deleted = static_cast<int>(pending_deletes.size()); | 757 NotifyModelChanged(); | 
| 745 if (num_deleted > 0) | |
| 746 NotifyModelChanged(); | |
| 747 | 758 | 
| 748 // Delete the download items after updating the observers. | 759 // Delete the download items themselves. | 
| 749 STLDeleteContainerPointers(pending_deletes.begin(), pending_deletes.end()); | 760 STLDeleteContainerPointers(pending_deletes.begin(), pending_deletes.end()); | 
| 750 pending_deletes.clear(); | 761 pending_deletes.clear(); | 
| 751 | 762 | 
| 752 return num_deleted; | 763 return num_deleted; | 
| 753 } | 764 } | 
| 754 | 765 | 
| 755 int DownloadManager::RemoveDownloads(const base::Time remove_begin) { | 766 int DownloadManager::RemoveDownloads(const base::Time remove_begin) { | 
| 756 return RemoveDownloadsBetween(remove_begin, base::Time()); | 767 return RemoveDownloadsBetween(remove_begin, base::Time()); | 
| 757 } | 768 } | 
| 758 | 769 | 
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1033 observed_download_manager_->RemoveObserver(this); | 1044 observed_download_manager_->RemoveObserver(this); | 
| 1034 } | 1045 } | 
| 1035 | 1046 | 
| 1036 void DownloadManager::OtherDownloadManagerObserver::ModelChanged() { | 1047 void DownloadManager::OtherDownloadManagerObserver::ModelChanged() { | 
| 1037 observing_download_manager_->NotifyModelChanged(); | 1048 observing_download_manager_->NotifyModelChanged(); | 
| 1038 } | 1049 } | 
| 1039 | 1050 | 
| 1040 void DownloadManager::OtherDownloadManagerObserver::ManagerGoingDown() { | 1051 void DownloadManager::OtherDownloadManagerObserver::ManagerGoingDown() { | 
| 1041 observed_download_manager_ = NULL; | 1052 observed_download_manager_ = NULL; | 
| 1042 } | 1053 } | 
| OLD | NEW |