| 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 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 267 DownloadManagerDelegate* DownloadManagerImpl::GetDelegate() const { | 267 DownloadManagerDelegate* DownloadManagerImpl::GetDelegate() const { |
| 268 return delegate_; | 268 return delegate_; |
| 269 } | 269 } |
| 270 | 270 |
| 271 void DownloadManagerImpl::Shutdown() { | 271 void DownloadManagerImpl::Shutdown() { |
| 272 DVLOG(20) << __func__ << "() shutdown_needed_ = " << shutdown_needed_; | 272 DVLOG(20) << __func__ << "() shutdown_needed_ = " << shutdown_needed_; |
| 273 if (!shutdown_needed_) | 273 if (!shutdown_needed_) |
| 274 return; | 274 return; |
| 275 shutdown_needed_ = false; | 275 shutdown_needed_ = false; |
| 276 | 276 |
| 277 FOR_EACH_OBSERVER(Observer, observers_, ManagerGoingDown(this)); | 277 for (auto& observer : observers_) |
| 278 observer.ManagerGoingDown(this); |
| 278 // TODO(benjhayden): Consider clearing observers_. | 279 // TODO(benjhayden): Consider clearing observers_. |
| 279 | 280 |
| 280 // If there are in-progress downloads, cancel them. This also goes for | 281 // If there are in-progress downloads, cancel them. This also goes for |
| 281 // dangerous downloads which will remain in history if they aren't explicitly | 282 // dangerous downloads which will remain in history if they aren't explicitly |
| 282 // accepted or discarded. Canceling will remove the intermediate download | 283 // accepted or discarded. Canceling will remove the intermediate download |
| 283 // file. | 284 // file. |
| 284 for (const auto& it : downloads_) { | 285 for (const auto& it : downloads_) { |
| 285 DownloadItemImpl* download = it.second; | 286 DownloadItemImpl* download = it.second; |
| 286 if (download->GetState() == DownloadItem::IN_PROGRESS) | 287 if (download->GetState() == DownloadItem::IN_PROGRESS) |
| 287 download->Cancel(false); | 288 download->Cancel(false); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 376 // attempt. | 377 // attempt. |
| 377 | 378 |
| 378 download->Start(std::move(download_file), std::move(info->request_handle), | 379 download->Start(std::move(download_file), std::move(info->request_handle), |
| 379 *info); | 380 *info); |
| 380 | 381 |
| 381 // For interrupted downloads, Start() will transition the state to | 382 // For interrupted downloads, Start() will transition the state to |
| 382 // IN_PROGRESS and consumers will be notified via OnDownloadUpdated(). | 383 // IN_PROGRESS and consumers will be notified via OnDownloadUpdated(). |
| 383 // For new downloads, we notify here, rather than earlier, so that | 384 // For new downloads, we notify here, rather than earlier, so that |
| 384 // the download_file is bound to download and all the usual | 385 // the download_file is bound to download and all the usual |
| 385 // setters (e.g. Cancel) work. | 386 // setters (e.g. Cancel) work. |
| 386 if (new_download) | 387 if (new_download) { |
| 387 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadCreated(this, download)); | 388 for (auto& observer : observers_) |
| 389 observer.OnDownloadCreated(this, download); |
| 390 } |
| 388 | 391 |
| 389 if (!on_started.is_null()) | 392 if (!on_started.is_null()) |
| 390 on_started.Run(download, DOWNLOAD_INTERRUPT_REASON_NONE); | 393 on_started.Run(download, DOWNLOAD_INTERRUPT_REASON_NONE); |
| 391 } | 394 } |
| 392 | 395 |
| 393 void DownloadManagerImpl::CheckForHistoryFilesRemoval() { | 396 void DownloadManagerImpl::CheckForHistoryFilesRemoval() { |
| 394 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 397 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 395 for (const auto& it : downloads_) { | 398 for (const auto& it : downloads_) { |
| 396 DownloadItemImpl* item = it.second; | 399 DownloadItemImpl* item = it.second; |
| 397 CheckForFileRemoval(item); | 400 CheckForFileRemoval(item); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 DCHECK_NE(content::DownloadItem::kInvalidId, id); | 456 DCHECK_NE(content::DownloadItem::kInvalidId, id); |
| 454 DCHECK(!base::ContainsKey(downloads_, id)); | 457 DCHECK(!base::ContainsKey(downloads_, id)); |
| 455 net::NetLogWithSource net_log = | 458 net::NetLogWithSource net_log = |
| 456 net::NetLogWithSource::Make(net_log_, net::NetLogSourceType::DOWNLOAD); | 459 net::NetLogWithSource::Make(net_log_, net::NetLogSourceType::DOWNLOAD); |
| 457 DownloadItemImpl* download_item = item_factory_->CreateSavePageItem( | 460 DownloadItemImpl* download_item = item_factory_->CreateSavePageItem( |
| 458 this, id, main_file_path, page_url, mime_type, std::move(request_handle), | 461 this, id, main_file_path, page_url, mime_type, std::move(request_handle), |
| 459 net_log); | 462 net_log); |
| 460 downloads_[download_item->GetId()] = download_item; | 463 downloads_[download_item->GetId()] = download_item; |
| 461 DCHECK(!base::ContainsKey(downloads_by_guid_, download_item->GetGuid())); | 464 DCHECK(!base::ContainsKey(downloads_by_guid_, download_item->GetGuid())); |
| 462 downloads_by_guid_[download_item->GetGuid()] = download_item; | 465 downloads_by_guid_[download_item->GetGuid()] = download_item; |
| 463 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadCreated( | 466 for (auto& observer : observers_) |
| 464 this, download_item)); | 467 observer.OnDownloadCreated(this, download_item); |
| 465 if (!item_created.is_null()) | 468 if (!item_created.is_null()) |
| 466 item_created.Run(download_item); | 469 item_created.Run(download_item); |
| 467 } | 470 } |
| 468 | 471 |
| 469 void DownloadManagerImpl::OnSavePackageSuccessfullyFinished( | 472 void DownloadManagerImpl::OnSavePackageSuccessfullyFinished( |
| 470 DownloadItem* download_item) { | 473 DownloadItem* download_item) { |
| 471 FOR_EACH_OBSERVER(Observer, observers_, | 474 for (auto& observer : observers_) |
| 472 OnSavePackageSuccessfullyFinished(this, download_item)); | 475 observer.OnSavePackageSuccessfullyFinished(this, download_item); |
| 473 } | 476 } |
| 474 | 477 |
| 475 // Resume a download of a specific URL. We send the request to the | 478 // Resume a download of a specific URL. We send the request to the |
| 476 // ResourceDispatcherHost, and let it send us responses like a regular | 479 // ResourceDispatcherHost, and let it send us responses like a regular |
| 477 // download. | 480 // download. |
| 478 void DownloadManagerImpl::ResumeInterruptedDownload( | 481 void DownloadManagerImpl::ResumeInterruptedDownload( |
| 479 std::unique_ptr<content::DownloadUrlParameters> params, | 482 std::unique_ptr<content::DownloadUrlParameters> params, |
| 480 uint32_t id) { | 483 uint32_t id) { |
| 481 BrowserThread::PostTaskAndReplyWithResult( | 484 BrowserThread::PostTaskAndReplyWithResult( |
| 482 BrowserThread::IO, FROM_HERE, | 485 BrowserThread::IO, FROM_HERE, |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 698 } | 701 } |
| 699 DCHECK(!base::ContainsKey(downloads_by_guid_, guid)); | 702 DCHECK(!base::ContainsKey(downloads_by_guid_, guid)); |
| 700 DownloadItemImpl* item = item_factory_->CreatePersistedItem( | 703 DownloadItemImpl* item = item_factory_->CreatePersistedItem( |
| 701 this, guid, id, current_path, target_path, url_chain, referrer_url, | 704 this, guid, id, current_path, target_path, url_chain, referrer_url, |
| 702 site_url, tab_url, tab_refererr_url, mime_type, original_mime_type, | 705 site_url, tab_url, tab_refererr_url, mime_type, original_mime_type, |
| 703 start_time, end_time, etag, last_modified, received_bytes, total_bytes, | 706 start_time, end_time, etag, last_modified, received_bytes, total_bytes, |
| 704 hash, state, danger_type, interrupt_reason, opened, | 707 hash, state, danger_type, interrupt_reason, opened, |
| 705 net::NetLogWithSource::Make(net_log_, net::NetLogSourceType::DOWNLOAD)); | 708 net::NetLogWithSource::Make(net_log_, net::NetLogSourceType::DOWNLOAD)); |
| 706 downloads_[id] = item; | 709 downloads_[id] = item; |
| 707 downloads_by_guid_[guid] = item; | 710 downloads_by_guid_[guid] = item; |
| 708 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadCreated(this, item)); | 711 for (auto& observer : observers_) |
| 712 observer.OnDownloadCreated(this, item); |
| 709 DVLOG(20) << __func__ << "() download = " << item->DebugString(true); | 713 DVLOG(20) << __func__ << "() download = " << item->DebugString(true); |
| 710 return item; | 714 return item; |
| 711 } | 715 } |
| 712 | 716 |
| 713 int DownloadManagerImpl::InProgressCount() const { | 717 int DownloadManagerImpl::InProgressCount() const { |
| 714 int count = 0; | 718 int count = 0; |
| 715 for (const auto& it : downloads_) { | 719 for (const auto& it : downloads_) { |
| 716 if (it.second->GetState() == DownloadItem::IN_PROGRESS) | 720 if (it.second->GetState() == DownloadItem::IN_PROGRESS) |
| 717 ++count; | 721 ++count; |
| 718 } | 722 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 if (delegate_) | 768 if (delegate_) |
| 765 delegate_->OpenDownload(download); | 769 delegate_->OpenDownload(download); |
| 766 } | 770 } |
| 767 | 771 |
| 768 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { | 772 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { |
| 769 if (delegate_) | 773 if (delegate_) |
| 770 delegate_->ShowDownloadInShell(download); | 774 delegate_->ShowDownloadInShell(download); |
| 771 } | 775 } |
| 772 | 776 |
| 773 } // namespace content | 777 } // namespace content |
| OLD | NEW |