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 |