Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(232)

Side by Side Diff: content/browser/download/download_manager_impl.cc

Issue 1924473003: [Downloads] Use the initiating StoragePartition for resumption. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix typo in comment Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 #include "net/base/upload_bytes_element_reader.h" 47 #include "net/base/upload_bytes_element_reader.h"
48 #include "net/url_request/url_request_context.h" 48 #include "net/url_request/url_request_context.h"
49 #include "storage/browser/blob/blob_url_request_job_factory.h" 49 #include "storage/browser/blob/blob_url_request_job_factory.h"
50 #include "url/origin.h" 50 #include "url/origin.h"
51 51
52 namespace content { 52 namespace content {
53 namespace { 53 namespace {
54 54
55 std::unique_ptr<UrlDownloader, BrowserThread::DeleteOnIOThread> BeginDownload( 55 std::unique_ptr<UrlDownloader, BrowserThread::DeleteOnIOThread> BeginDownload(
56 std::unique_ptr<DownloadUrlParameters> params, 56 std::unique_ptr<DownloadUrlParameters> params,
57 content::ResourceContext* resource_context,
57 uint32_t download_id, 58 uint32_t download_id,
58 base::WeakPtr<DownloadManagerImpl> download_manager) { 59 base::WeakPtr<DownloadManagerImpl> download_manager) {
59 DCHECK_CURRENTLY_ON(BrowserThread::IO); 60 DCHECK_CURRENTLY_ON(BrowserThread::IO);
60 61
61 std::unique_ptr<net::URLRequest> url_request = 62 std::unique_ptr<net::URLRequest> url_request =
62 DownloadRequestCore::CreateRequestOnIOThread(download_id, params.get()); 63 DownloadRequestCore::CreateRequestOnIOThread(download_id, params.get());
63 std::unique_ptr<storage::BlobDataHandle> blob_data_handle = 64 std::unique_ptr<storage::BlobDataHandle> blob_data_handle =
64 params->GetBlobDataHandle(); 65 params->GetBlobDataHandle();
65 if (blob_data_handle) { 66 if (blob_data_handle) {
66 storage::BlobProtocolHandler::SetRequestedBlobDataHandle( 67 storage::BlobProtocolHandler::SetRequestedBlobDataHandle(
67 url_request.get(), std::move(blob_data_handle)); 68 url_request.get(), std::move(blob_data_handle));
68 } 69 }
69 70
70 // If there's a valid renderer process associated with the request, then the 71 // If there's a valid renderer process associated with the request, then the
71 // request should be driven by the ResourceLoader. Pass it over to the 72 // request should be driven by the ResourceLoader. Pass it over to the
72 // ResourceDispatcherHostImpl which will in turn pass it along to the 73 // ResourceDispatcherHostImpl which will in turn pass it along to the
73 // ResourceLoader. 74 // ResourceLoader.
74 if (params->render_process_host_id() != -1) { 75 if (params->render_process_host_id() >= 0) {
75 DownloadInterruptReason reason = 76 DownloadInterruptReason reason =
76 ResourceDispatcherHostImpl::Get()->BeginDownload( 77 ResourceDispatcherHostImpl::Get()->BeginDownload(
77 std::move(url_request), params->referrer(), 78 std::move(url_request), params->referrer(),
78 params->content_initiated(), params->resource_context(), 79 params->content_initiated(), resource_context,
79 params->render_process_host_id(), 80 params->render_process_host_id(),
80 params->render_view_host_routing_id(), 81 params->render_view_host_routing_id(),
81 params->render_frame_host_routing_id(), 82 params->render_frame_host_routing_id(),
82 params->do_not_prompt_for_login()); 83 params->do_not_prompt_for_login());
83 84
84 // If the download was accepted, the DownloadResourceHandler is now 85 // If the download was accepted, the DownloadResourceHandler is now
85 // responsible for driving the request to completion. 86 // responsible for driving the request to completion.
86 if (reason == DOWNLOAD_INTERRUPT_REASON_NONE) 87 if (reason == DOWNLOAD_INTERRUPT_REASON_NONE)
87 return nullptr; 88 return nullptr;
88 89
(...skipping 24 matching lines...) Expand all
113 ~DownloadItemFactoryImpl() override {} 114 ~DownloadItemFactoryImpl() override {}
114 115
115 DownloadItemImpl* CreatePersistedItem( 116 DownloadItemImpl* CreatePersistedItem(
116 DownloadItemImplDelegate* delegate, 117 DownloadItemImplDelegate* delegate,
117 const std::string& guid, 118 const std::string& guid,
118 uint32_t download_id, 119 uint32_t download_id,
119 const base::FilePath& current_path, 120 const base::FilePath& current_path,
120 const base::FilePath& target_path, 121 const base::FilePath& target_path,
121 const std::vector<GURL>& url_chain, 122 const std::vector<GURL>& url_chain,
122 const GURL& referrer_url, 123 const GURL& referrer_url,
124 const GURL& site_url,
123 const GURL& tab_url, 125 const GURL& tab_url,
124 const GURL& tab_refererr_url, 126 const GURL& tab_refererr_url,
125 const std::string& mime_type, 127 const std::string& mime_type,
126 const std::string& original_mime_type, 128 const std::string& original_mime_type,
127 const base::Time& start_time, 129 const base::Time& start_time,
128 const base::Time& end_time, 130 const base::Time& end_time,
129 const std::string& etag, 131 const std::string& etag,
130 const std::string& last_modified, 132 const std::string& last_modified,
131 int64_t received_bytes, 133 int64_t received_bytes,
132 int64_t total_bytes, 134 int64_t total_bytes,
133 const std::string& hash, 135 const std::string& hash,
134 DownloadItem::DownloadState state, 136 DownloadItem::DownloadState state,
135 DownloadDangerType danger_type, 137 DownloadDangerType danger_type,
136 DownloadInterruptReason interrupt_reason, 138 DownloadInterruptReason interrupt_reason,
137 bool opened, 139 bool opened,
138 const net::BoundNetLog& bound_net_log) override { 140 const net::BoundNetLog& bound_net_log) override {
139 return new DownloadItemImpl( 141 return new DownloadItemImpl(
140 delegate, guid, download_id, current_path, target_path, url_chain, 142 delegate, guid, download_id, current_path, target_path, url_chain,
141 referrer_url, tab_url, tab_refererr_url, mime_type, original_mime_type, 143 referrer_url, site_url, tab_url, tab_refererr_url, mime_type,
142 start_time, end_time, etag, last_modified, received_bytes, total_bytes, 144 original_mime_type, start_time, end_time, etag, last_modified,
143 hash, state, danger_type, interrupt_reason, opened, bound_net_log); 145 received_bytes, total_bytes, hash, state, danger_type, interrupt_reason,
146 opened, bound_net_log);
144 } 147 }
145 148
146 DownloadItemImpl* CreateActiveItem( 149 DownloadItemImpl* CreateActiveItem(
147 DownloadItemImplDelegate* delegate, 150 DownloadItemImplDelegate* delegate,
148 uint32_t download_id, 151 uint32_t download_id,
149 const DownloadCreateInfo& info, 152 const DownloadCreateInfo& info,
150 const net::BoundNetLog& bound_net_log) override { 153 const net::BoundNetLog& bound_net_log) override {
151 return new DownloadItemImpl(delegate, download_id, info, bound_net_log); 154 return new DownloadItemImpl(delegate, download_id, info, bound_net_log);
152 } 155 }
153 156
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
463 466
464 // Resume a download of a specific URL. We send the request to the 467 // Resume a download of a specific URL. We send the request to the
465 // ResourceDispatcherHost, and let it send us responses like a regular 468 // ResourceDispatcherHost, and let it send us responses like a regular
466 // download. 469 // download.
467 void DownloadManagerImpl::ResumeInterruptedDownload( 470 void DownloadManagerImpl::ResumeInterruptedDownload(
468 std::unique_ptr<content::DownloadUrlParameters> params, 471 std::unique_ptr<content::DownloadUrlParameters> params,
469 uint32_t id) { 472 uint32_t id) {
470 RecordDownloadSource(INITIATED_BY_RESUMPTION); 473 RecordDownloadSource(INITIATED_BY_RESUMPTION);
471 BrowserThread::PostTaskAndReplyWithResult( 474 BrowserThread::PostTaskAndReplyWithResult(
472 BrowserThread::IO, FROM_HERE, 475 BrowserThread::IO, FROM_HERE,
473 base::Bind(&BeginDownload, base::Passed(&params), id, 476 base::Bind(&BeginDownload, base::Passed(&params),
477 browser_context_->GetResourceContext(), id,
474 weak_factory_.GetWeakPtr()), 478 weak_factory_.GetWeakPtr()),
475 base::Bind(&DownloadManagerImpl::AddUrlDownloader, 479 base::Bind(&DownloadManagerImpl::AddUrlDownloader,
476 weak_factory_.GetWeakPtr())); 480 weak_factory_.GetWeakPtr()));
477 } 481 }
478 482
479 void DownloadManagerImpl::SetDownloadItemFactoryForTesting( 483 void DownloadManagerImpl::SetDownloadItemFactoryForTesting(
480 std::unique_ptr<DownloadItemFactory> item_factory) { 484 std::unique_ptr<DownloadItemFactory> item_factory) {
481 item_factory_ = std::move(item_factory); 485 item_factory_ = std::move(item_factory);
482 } 486 }
483 487
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 void DownloadManagerImpl::DownloadUrl( 581 void DownloadManagerImpl::DownloadUrl(
578 std::unique_ptr<DownloadUrlParameters> params) { 582 std::unique_ptr<DownloadUrlParameters> params) {
579 if (params->post_id() >= 0) { 583 if (params->post_id() >= 0) {
580 // Check this here so that the traceback is more useful. 584 // Check this here so that the traceback is more useful.
581 DCHECK(params->prefer_cache()); 585 DCHECK(params->prefer_cache());
582 DCHECK_EQ("POST", params->method()); 586 DCHECK_EQ("POST", params->method());
583 } 587 }
584 BrowserThread::PostTaskAndReplyWithResult( 588 BrowserThread::PostTaskAndReplyWithResult(
585 BrowserThread::IO, FROM_HERE, 589 BrowserThread::IO, FROM_HERE,
586 base::Bind(&BeginDownload, base::Passed(&params), 590 base::Bind(&BeginDownload, base::Passed(&params),
591 browser_context_->GetResourceContext(),
587 content::DownloadItem::kInvalidId, weak_factory_.GetWeakPtr()), 592 content::DownloadItem::kInvalidId, weak_factory_.GetWeakPtr()),
588 base::Bind(&DownloadManagerImpl::AddUrlDownloader, 593 base::Bind(&DownloadManagerImpl::AddUrlDownloader,
589 weak_factory_.GetWeakPtr())); 594 weak_factory_.GetWeakPtr()));
590 } 595 }
591 596
592 void DownloadManagerImpl::AddObserver(Observer* observer) { 597 void DownloadManagerImpl::AddObserver(Observer* observer) {
593 observers_.AddObserver(observer); 598 observers_.AddObserver(observer);
594 } 599 }
595 600
596 void DownloadManagerImpl::RemoveObserver(Observer* observer) { 601 void DownloadManagerImpl::RemoveObserver(Observer* observer) {
597 observers_.RemoveObserver(observer); 602 observers_.RemoveObserver(observer);
598 } 603 }
599 604
600 DownloadItem* DownloadManagerImpl::CreateDownloadItem( 605 DownloadItem* DownloadManagerImpl::CreateDownloadItem(
601 const std::string& guid, 606 const std::string& guid,
602 uint32_t id, 607 uint32_t id,
603 const base::FilePath& current_path, 608 const base::FilePath& current_path,
604 const base::FilePath& target_path, 609 const base::FilePath& target_path,
605 const std::vector<GURL>& url_chain, 610 const std::vector<GURL>& url_chain,
606 const GURL& referrer_url, 611 const GURL& referrer_url,
612 const GURL& site_url,
607 const GURL& tab_url, 613 const GURL& tab_url,
608 const GURL& tab_refererr_url, 614 const GURL& tab_refererr_url,
609 const std::string& mime_type, 615 const std::string& mime_type,
610 const std::string& original_mime_type, 616 const std::string& original_mime_type,
611 const base::Time& start_time, 617 const base::Time& start_time,
612 const base::Time& end_time, 618 const base::Time& end_time,
613 const std::string& etag, 619 const std::string& etag,
614 const std::string& last_modified, 620 const std::string& last_modified,
615 int64_t received_bytes, 621 int64_t received_bytes,
616 int64_t total_bytes, 622 int64_t total_bytes,
617 const std::string& hash, 623 const std::string& hash,
618 DownloadItem::DownloadState state, 624 DownloadItem::DownloadState state,
619 DownloadDangerType danger_type, 625 DownloadDangerType danger_type,
620 DownloadInterruptReason interrupt_reason, 626 DownloadInterruptReason interrupt_reason,
621 bool opened) { 627 bool opened) {
622 if (ContainsKey(downloads_, id)) { 628 if (ContainsKey(downloads_, id)) {
623 NOTREACHED(); 629 NOTREACHED();
624 return NULL; 630 return NULL;
625 } 631 }
626 DCHECK(!ContainsKey(downloads_by_guid_, guid)); 632 DCHECK(!ContainsKey(downloads_by_guid_, guid));
627 DownloadItemImpl* item = item_factory_->CreatePersistedItem( 633 DownloadItemImpl* item = item_factory_->CreatePersistedItem(
628 this, guid, id, current_path, target_path, url_chain, referrer_url, 634 this, guid, id, current_path, target_path, url_chain, referrer_url,
629 tab_url, tab_refererr_url, mime_type, original_mime_type, start_time, 635 site_url, tab_url, tab_refererr_url, mime_type, original_mime_type,
630 end_time, etag, last_modified, received_bytes, total_bytes, hash, state, 636 start_time, end_time, etag, last_modified, received_bytes, total_bytes,
631 danger_type, interrupt_reason, opened, 637 hash, state, danger_type, interrupt_reason, opened,
632 net::BoundNetLog::Make(net_log_, net::NetLog::SOURCE_DOWNLOAD)); 638 net::BoundNetLog::Make(net_log_, net::NetLog::SOURCE_DOWNLOAD));
633 downloads_[id] = item; 639 downloads_[id] = item;
634 downloads_by_guid_[guid] = item; 640 downloads_by_guid_[guid] = item;
635 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadCreated(this, item)); 641 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadCreated(this, item));
636 DVLOG(20) << __FUNCTION__ << "() download = " << item->DebugString(true); 642 DVLOG(20) << __FUNCTION__ << "() download = " << item->DebugString(true);
637 return item; 643 return item;
638 } 644 }
639 645
640 int DownloadManagerImpl::InProgressCount() const { 646 int DownloadManagerImpl::InProgressCount() const {
641 int count = 0; 647 int count = 0;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 if (delegate_) 697 if (delegate_)
692 delegate_->OpenDownload(download); 698 delegate_->OpenDownload(download);
693 } 699 }
694 700
695 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) { 701 void DownloadManagerImpl::ShowDownloadInShell(DownloadItemImpl* download) {
696 if (delegate_) 702 if (delegate_)
697 delegate_->ShowDownloadInShell(download); 703 delegate_->ShowDownloadInShell(download);
698 } 704 }
699 705
700 } // namespace content 706 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_manager_impl.h ('k') | content/browser/download/download_manager_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698