Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "content/browser/download/download_manager_impl.h" | 5 #include "content/browser/download/download_manager_impl.h" |
| 6 | 6 |
| 7 #include <iterator> | 7 #include <iterator> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 238 shutdown_needed_(true), | 238 shutdown_needed_(true), |
| 239 browser_context_(browser_context), | 239 browser_context_(browser_context), |
| 240 delegate_(NULL), | 240 delegate_(NULL), |
| 241 net_log_(net_log), | 241 net_log_(net_log), |
| 242 weak_factory_(this) { | 242 weak_factory_(this) { |
| 243 DCHECK(browser_context); | 243 DCHECK(browser_context); |
| 244 } | 244 } |
| 245 | 245 |
| 246 DownloadManagerImpl::~DownloadManagerImpl() { | 246 DownloadManagerImpl::~DownloadManagerImpl() { |
| 247 DCHECK(!shutdown_needed_); | 247 DCHECK(!shutdown_needed_); |
| 248 DCHECK(removed_downloads_.empty()); | |
|
Dan Beam
2014/11/19 23:16:26
I could change this to:
STLDeleteValues(&remove
| |
| 248 } | 249 } |
| 249 | 250 |
| 250 DownloadItemImpl* DownloadManagerImpl::CreateActiveItem( | 251 DownloadItemImpl* DownloadManagerImpl::CreateActiveItem( |
| 251 uint32 id, const DownloadCreateInfo& info) { | 252 uint32 id, const DownloadCreateInfo& info) { |
| 252 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 253 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 253 DCHECK(!ContainsKey(downloads_, id)); | 254 DCHECK(!ContainsKey(downloads_, id)); |
| 254 net::BoundNetLog bound_net_log = | 255 net::BoundNetLog bound_net_log = |
| 255 net::BoundNetLog::Make(net_log_, net::NetLog::SOURCE_DOWNLOAD); | 256 net::BoundNetLog::Make(net_log_, net::NetLog::SOURCE_DOWNLOAD); |
| 256 DownloadItemImpl* download = | 257 DownloadItemImpl* download = |
| 257 item_factory_->CreateActiveItem(this, id, info, bound_net_log); | 258 item_factory_->CreateActiveItem(this, id, info, bound_net_log); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 338 // dangerous downloads which will remain in history if they aren't explicitly | 339 // dangerous downloads which will remain in history if they aren't explicitly |
| 339 // accepted or discarded. Canceling will remove the intermediate download | 340 // accepted or discarded. Canceling will remove the intermediate download |
| 340 // file. | 341 // file. |
| 341 for (DownloadMap::iterator it = downloads_.begin(); it != downloads_.end(); | 342 for (DownloadMap::iterator it = downloads_.begin(); it != downloads_.end(); |
| 342 ++it) { | 343 ++it) { |
| 343 DownloadItemImpl* download = it->second; | 344 DownloadItemImpl* download = it->second; |
| 344 if (download->GetState() == DownloadItem::IN_PROGRESS) | 345 if (download->GetState() == DownloadItem::IN_PROGRESS) |
| 345 download->Cancel(false); | 346 download->Cancel(false); |
| 346 } | 347 } |
| 347 STLDeleteValues(&downloads_); | 348 STLDeleteValues(&downloads_); |
| 348 downloads_.clear(); | |
|
Dan Beam
2014/11/19 23:16:26
STLDeleteValues() does this already
| |
| 349 | 349 |
| 350 // We'll have nothing more to report to the observers after this point. | 350 // We'll have nothing more to report to the observers after this point. |
| 351 observers_.Clear(); | 351 observers_.Clear(); |
| 352 | 352 |
| 353 if (delegate_) | 353 if (delegate_) |
| 354 delegate_->Shutdown(); | 354 delegate_->Shutdown(); |
| 355 delegate_ = NULL; | 355 delegate_ = NULL; |
| 356 } | 356 } |
| 357 | 357 |
| 358 void DownloadManagerImpl::StartDownload( | 358 void DownloadManagerImpl::StartDownload( |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 556 return file_factory_.get(); | 556 return file_factory_.get(); |
| 557 } | 557 } |
| 558 | 558 |
| 559 void DownloadManagerImpl::DownloadRemoved(DownloadItemImpl* download) { | 559 void DownloadManagerImpl::DownloadRemoved(DownloadItemImpl* download) { |
| 560 if (!download) | 560 if (!download) |
| 561 return; | 561 return; |
| 562 | 562 |
| 563 uint32 download_id = download->GetId(); | 563 uint32 download_id = download->GetId(); |
| 564 if (downloads_.erase(download_id) == 0) | 564 if (downloads_.erase(download_id) == 0) |
| 565 return; | 565 return; |
| 566 delete download; | 566 |
| 567 removed_downloads_[download_id] = download; | |
| 567 } | 568 } |
| 568 | 569 |
| 569 int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, | 570 int DownloadManagerImpl::RemoveDownloadsBetween(base::Time remove_begin, |
| 570 base::Time remove_end) { | 571 base::Time remove_end) { |
| 571 int count = 0; | 572 int count = 0; |
| 572 DownloadMap::const_iterator it = downloads_.begin(); | 573 DownloadMap::const_iterator it = downloads_.begin(); |
| 573 while (it != downloads_.end()) { | 574 while (it != downloads_.end()) { |
| 574 DownloadItemImpl* download = it->second; | 575 DownloadItemImpl* download = it->second; |
| 575 | 576 |
| 576 // Increment done here to protect against invalidation below. | 577 // Increment done here to protect against invalidation below. |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 591 return RemoveDownloadsBetween(remove_begin, base::Time()); | 592 return RemoveDownloadsBetween(remove_begin, base::Time()); |
| 592 } | 593 } |
| 593 | 594 |
| 594 int DownloadManagerImpl::RemoveAllDownloads() { | 595 int DownloadManagerImpl::RemoveAllDownloads() { |
| 595 // The null times make the date range unbounded. | 596 // The null times make the date range unbounded. |
| 596 int num_deleted = RemoveDownloadsBetween(base::Time(), base::Time()); | 597 int num_deleted = RemoveDownloadsBetween(base::Time(), base::Time()); |
| 597 RecordClearAllSize(num_deleted); | 598 RecordClearAllSize(num_deleted); |
| 598 return num_deleted; | 599 return num_deleted; |
| 599 } | 600 } |
| 600 | 601 |
| 602 void DownloadManagerImpl::ReviveDownload(uint32 id) { | |
| 603 auto it = removed_downloads_.find(id); | |
| 604 if (it == removed_downloads_.end()) | |
| 605 return; | |
| 606 | |
| 607 DownloadItemImpl* item = removed_downloads_[id]; | |
| 608 removed_downloads_.erase(it); | |
| 609 | |
| 610 downloads_[id] = item; | |
| 611 | |
| 612 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadRevived(this, item)); | |
| 613 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadCreated(this, item)); | |
|
benjhayden
2014/11/21 00:50:01
Is every listener really ok with having a single i
Dan Beam
2014/11/21 05:32:21
According to my interpretation of the documentatio
| |
| 614 } | |
| 615 | |
| 616 void DownloadManagerImpl::FinalizeRemoval(uint32 id) { | |
| 617 auto it = removed_downloads_.find(id); | |
| 618 if (it == removed_downloads_.end()) | |
| 619 return; | |
| 620 | |
| 621 delete it->second; | |
| 622 removed_downloads_.erase(it); | |
| 623 } | |
| 624 | |
| 601 void DownloadManagerImpl::DownloadUrl( | 625 void DownloadManagerImpl::DownloadUrl( |
| 602 scoped_ptr<DownloadUrlParameters> params) { | 626 scoped_ptr<DownloadUrlParameters> params) { |
| 603 if (params->post_id() >= 0) { | 627 if (params->post_id() >= 0) { |
| 604 // Check this here so that the traceback is more useful. | 628 // Check this here so that the traceback is more useful. |
| 605 DCHECK(params->prefer_cache()); | 629 DCHECK(params->prefer_cache()); |
| 606 DCHECK_EQ("POST", params->method()); | 630 DCHECK_EQ("POST", params->method()); |
| 607 } | 631 } |
| 608 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( | 632 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind( |
| 609 &BeginDownload, base::Passed(¶ms), | 633 &BeginDownload, base::Passed(¶ms), |
| 610 content::DownloadItem::kInvalidId)); | 634 content::DownloadItem::kInvalidId)); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 717 if (delegate_) | 741 if (delegate_) |
| 718 delegate_->OpenDownload(download); | 742 delegate_->OpenDownload(download); |
| 719 } | 743 } |
| 720 | 744 |
| 721 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { | 745 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { |
| 722 if (delegate_) | 746 if (delegate_) |
| 723 delegate_->ShowDownloadInShell(download); | 747 delegate_->ShowDownloadInShell(download); |
| 724 } | 748 } |
| 725 | 749 |
| 726 } // namespace content | 750 } // namespace content |
| OLD | NEW |