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

Side by Side Diff: content/browser/download/download_item_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 // File method ordering: Methods in this file are in the same order as 5 // File method ordering: Methods in this file are in the same order as
6 // in download_item_impl.h, with the following exception: The public 6 // in download_item_impl.h, with the following exception: The public
7 // interface Start is placed in chronological order with the other 7 // interface Start is placed in chronological order with the other
8 // (private) routines that together define a DownloadItem's state 8 // (private) routines that together define a DownloadItem's state
9 // transitions as the download progresses. See "Download progression 9 // transitions as the download progresses. See "Download progression
10 // cascade" later in this file. 10 // cascade" later in this file.
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 #include "content/browser/download/download_request_handle.h" 45 #include "content/browser/download/download_request_handle.h"
46 #include "content/browser/download/download_stats.h" 46 #include "content/browser/download/download_stats.h"
47 #include "content/browser/renderer_host/render_view_host_impl.h" 47 #include "content/browser/renderer_host/render_view_host_impl.h"
48 #include "content/browser/web_contents/web_contents_impl.h" 48 #include "content/browser/web_contents/web_contents_impl.h"
49 #include "content/public/browser/browser_context.h" 49 #include "content/public/browser/browser_context.h"
50 #include "content/public/browser/browser_thread.h" 50 #include "content/public/browser/browser_thread.h"
51 #include "content/public/browser/content_browser_client.h" 51 #include "content/public/browser/content_browser_client.h"
52 #include "content/public/browser/download_danger_type.h" 52 #include "content/public/browser/download_danger_type.h"
53 #include "content/public/browser/download_interrupt_reasons.h" 53 #include "content/public/browser/download_interrupt_reasons.h"
54 #include "content/public/browser/download_url_parameters.h" 54 #include "content/public/browser/download_url_parameters.h"
55 #include "content/public/browser/storage_partition.h"
55 #include "content/public/common/content_features.h" 56 #include "content/public/common/content_features.h"
56 #include "content/public/common/referrer.h" 57 #include "content/public/common/referrer.h"
57 58
58 namespace content { 59 namespace content {
59 60
60 namespace { 61 namespace {
61 62
62 bool DeleteDownloadedFile(const base::FilePath& path) { 63 bool DeleteDownloadedFile(const base::FilePath& path) {
63 DCHECK_CURRENTLY_ON(BrowserThread::FILE); 64 DCHECK_CURRENTLY_ON(BrowserThread::FILE);
64 65
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 const int DownloadItemImpl::kMaxAutoResumeAttempts = 5; 107 const int DownloadItemImpl::kMaxAutoResumeAttempts = 5;
107 108
108 // Constructor for reading from the history service. 109 // Constructor for reading from the history service.
109 DownloadItemImpl::DownloadItemImpl(DownloadItemImplDelegate* delegate, 110 DownloadItemImpl::DownloadItemImpl(DownloadItemImplDelegate* delegate,
110 const std::string& guid, 111 const std::string& guid,
111 uint32_t download_id, 112 uint32_t download_id,
112 const base::FilePath& current_path, 113 const base::FilePath& current_path,
113 const base::FilePath& target_path, 114 const base::FilePath& target_path,
114 const std::vector<GURL>& url_chain, 115 const std::vector<GURL>& url_chain,
115 const GURL& referrer_url, 116 const GURL& referrer_url,
117 const GURL& site_url,
116 const GURL& tab_url, 118 const GURL& tab_url,
117 const GURL& tab_refererr_url, 119 const GURL& tab_refererr_url,
118 const std::string& mime_type, 120 const std::string& mime_type,
119 const std::string& original_mime_type, 121 const std::string& original_mime_type,
120 const base::Time& start_time, 122 const base::Time& start_time,
121 const base::Time& end_time, 123 const base::Time& end_time,
122 const std::string& etag, 124 const std::string& etag,
123 const std::string& last_modified, 125 const std::string& last_modified,
124 int64_t received_bytes, 126 int64_t received_bytes,
125 int64_t total_bytes, 127 int64_t total_bytes,
126 const std::string& hash, 128 const std::string& hash,
127 DownloadItem::DownloadState state, 129 DownloadItem::DownloadState state,
128 DownloadDangerType danger_type, 130 DownloadDangerType danger_type,
129 DownloadInterruptReason interrupt_reason, 131 DownloadInterruptReason interrupt_reason,
130 bool opened, 132 bool opened,
131 const net::BoundNetLog& bound_net_log) 133 const net::BoundNetLog& bound_net_log)
132 : guid_(base::ToUpperASCII(guid)), 134 : guid_(base::ToUpperASCII(guid)),
133 download_id_(download_id), 135 download_id_(download_id),
134 target_path_(target_path), 136 target_path_(target_path),
135 url_chain_(url_chain), 137 url_chain_(url_chain),
136 referrer_url_(referrer_url), 138 referrer_url_(referrer_url),
139 site_url_(site_url),
137 tab_url_(tab_url), 140 tab_url_(tab_url),
138 tab_referrer_url_(tab_refererr_url), 141 tab_referrer_url_(tab_refererr_url),
139 mime_type_(mime_type), 142 mime_type_(mime_type),
140 original_mime_type_(original_mime_type), 143 original_mime_type_(original_mime_type),
141 total_bytes_(total_bytes), 144 total_bytes_(total_bytes),
142 last_reason_(interrupt_reason), 145 last_reason_(interrupt_reason),
143 start_tick_(base::TimeTicks()), 146 start_tick_(base::TimeTicks()),
144 state_(ExternalToInternalState(state)), 147 state_(ExternalToInternalState(state)),
145 danger_type_(danger_type), 148 danger_type_(danger_type),
146 start_time_(start_time), 149 start_time_(start_time),
(...skipping 20 matching lines...) Expand all
167 uint32_t download_id, 170 uint32_t download_id,
168 const DownloadCreateInfo& info, 171 const DownloadCreateInfo& info,
169 const net::BoundNetLog& bound_net_log) 172 const net::BoundNetLog& bound_net_log)
170 : guid_(base::ToUpperASCII(base::GenerateGUID())), 173 : guid_(base::ToUpperASCII(base::GenerateGUID())),
171 download_id_(download_id), 174 download_id_(download_id),
172 target_disposition_((info.save_info->prompt_for_save_location) 175 target_disposition_((info.save_info->prompt_for_save_location)
173 ? TARGET_DISPOSITION_PROMPT 176 ? TARGET_DISPOSITION_PROMPT
174 : TARGET_DISPOSITION_OVERWRITE), 177 : TARGET_DISPOSITION_OVERWRITE),
175 url_chain_(info.url_chain), 178 url_chain_(info.url_chain),
176 referrer_url_(info.referrer_url), 179 referrer_url_(info.referrer_url),
180 site_url_(info.site_url),
177 tab_url_(info.tab_url), 181 tab_url_(info.tab_url),
178 tab_referrer_url_(info.tab_referrer_url), 182 tab_referrer_url_(info.tab_referrer_url),
179 suggested_filename_(base::UTF16ToUTF8(info.save_info->suggested_name)), 183 suggested_filename_(base::UTF16ToUTF8(info.save_info->suggested_name)),
180 forced_file_path_(info.save_info->file_path), 184 forced_file_path_(info.save_info->file_path),
181 transition_type_(info.transition_type), 185 transition_type_(info.transition_type),
182 has_user_gesture_(info.has_user_gesture), 186 has_user_gesture_(info.has_user_gesture),
183 content_disposition_(info.content_disposition), 187 content_disposition_(info.content_disposition),
184 mime_type_(info.mime_type), 188 mime_type_(info.mime_type),
185 original_mime_type_(info.original_mime_type), 189 original_mime_type_(info.original_mime_type),
186 remote_address_(info.remote_address), 190 remote_address_(info.remote_address),
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 const GURL& DownloadItemImpl::GetOriginalUrl() const { 529 const GURL& DownloadItemImpl::GetOriginalUrl() const {
526 // Be careful about taking the front() of possibly-empty vectors! 530 // Be careful about taking the front() of possibly-empty vectors!
527 // http://crbug.com/190096 531 // http://crbug.com/190096
528 return url_chain_.empty() ? GURL::EmptyGURL() : url_chain_.front(); 532 return url_chain_.empty() ? GURL::EmptyGURL() : url_chain_.front();
529 } 533 }
530 534
531 const GURL& DownloadItemImpl::GetReferrerUrl() const { 535 const GURL& DownloadItemImpl::GetReferrerUrl() const {
532 return referrer_url_; 536 return referrer_url_;
533 } 537 }
534 538
539 const GURL& DownloadItemImpl::GetSiteUrl() const {
540 return site_url_;
541 }
542
535 const GURL& DownloadItemImpl::GetTabUrl() const { 543 const GURL& DownloadItemImpl::GetTabUrl() const {
536 return tab_url_; 544 return tab_url_;
537 } 545 }
538 546
539 const GURL& DownloadItemImpl::GetTabReferrerUrl() const { 547 const GURL& DownloadItemImpl::GetTabReferrerUrl() const {
540 return tab_referrer_url_; 548 return tab_referrer_url_;
541 } 549 }
542 550
543 std::string DownloadItemImpl::GetSuggestedFilename() const { 551 std::string DownloadItemImpl::GetSuggestedFilename() const {
544 return suggested_filename_; 552 return suggested_filename_;
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
803 " reason = %s" 811 " reason = %s"
804 " paused = %c" 812 " paused = %c"
805 " resume_mode = %s" 813 " resume_mode = %s"
806 " auto_resume_count = %d" 814 " auto_resume_count = %d"
807 " danger = %d" 815 " danger = %d"
808 " all_data_saved = %c" 816 " all_data_saved = %c"
809 " last_modified = '%s'" 817 " last_modified = '%s'"
810 " etag = '%s'" 818 " etag = '%s'"
811 " has_download_file = %s" 819 " has_download_file = %s"
812 " url_chain = \n\t\"%s\"\n\t" 820 " url_chain = \n\t\"%s\"\n\t"
813 " current_path = \"%" PRFilePath "\"\n\t" 821 " current_path = \"%" PRFilePath
814 " target_path = \"%" PRFilePath "\"" 822 "\"\n\t"
815 " referrer = \"%s\"", 823 " target_path = \"%" PRFilePath
816 GetTotalBytes(), 824 "\""
817 GetReceivedBytes(), 825 " referrer = \"%s\""
826 " site_url = \"%s\"",
827 GetTotalBytes(), GetReceivedBytes(),
818 DownloadInterruptReasonToString(last_reason_).c_str(), 828 DownloadInterruptReasonToString(last_reason_).c_str(),
819 IsPaused() ? 'T' : 'F', 829 IsPaused() ? 'T' : 'F', DebugResumeModeString(GetResumeMode()),
820 DebugResumeModeString(GetResumeMode()), 830 auto_resume_count_, GetDangerType(), AllDataSaved() ? 'T' : 'F',
821 auto_resume_count_, 831 GetLastModifiedTime().c_str(), GetETag().c_str(),
822 GetDangerType(), 832 download_file_.get() ? "true" : "false", url_list.c_str(),
823 AllDataSaved() ? 'T' : 'F', 833 GetFullPath().value().c_str(), GetTargetFilePath().value().c_str(),
824 GetLastModifiedTime().c_str(), 834 GetReferrerUrl().spec().c_str(), GetSiteUrl().spec().c_str());
825 GetETag().c_str(),
826 download_file_.get() ? "true" : "false",
827 url_list.c_str(),
828 GetFullPath().value().c_str(),
829 GetTargetFilePath().value().c_str(),
830 GetReferrerUrl().spec().c_str());
831 } else { 835 } else {
832 description += base::StringPrintf(" url = \"%s\"", url_list.c_str()); 836 description += base::StringPrintf(" url = \"%s\"", url_list.c_str());
833 } 837 }
834 838
835 description += " }"; 839 description += " }";
836 840
837 return description; 841 return description;
838 } 842 }
839 843
840 DownloadItemImpl::ResumeMode DownloadItemImpl::GetResumeMode() const { 844 DownloadItemImpl::ResumeMode DownloadItemImpl::GetResumeMode() const {
(...skipping 1053 matching lines...) Expand 10 before | Expand all | Expand 10 after
1894 ResumeMode mode = GetResumeMode(); 1898 ResumeMode mode = GetResumeMode();
1895 if (mode == RESUME_MODE_IMMEDIATE_RESTART || 1899 if (mode == RESUME_MODE_IMMEDIATE_RESTART ||
1896 mode == RESUME_MODE_USER_RESTART) { 1900 mode == RESUME_MODE_USER_RESTART) {
1897 received_bytes_ = 0; 1901 received_bytes_ = 0;
1898 last_modified_time_.clear(); 1902 last_modified_time_.clear();
1899 etag_.clear(); 1903 etag_.clear();
1900 hash_.clear(); 1904 hash_.clear();
1901 hash_state_.reset(); 1905 hash_state_.reset();
1902 } 1906 }
1903 1907
1908 StoragePartition* storage_partition =
1909 BrowserContext::GetStoragePartitionForSite(GetBrowserContext(),
1910 site_url_);
1911
1904 // Avoid using the WebContents even if it's still around. Resumption requests 1912 // Avoid using the WebContents even if it's still around. Resumption requests
1905 // are consistently routed through the no-renderer code paths so that the 1913 // are consistently routed through the no-renderer code paths so that the
1906 // request will not be dropped if the WebContents (and by extension, the 1914 // request will not be dropped if the WebContents (and by extension, the
1907 // associated renderer) goes away before a response is received. 1915 // associated renderer) goes away before a response is received.
1908 std::unique_ptr<DownloadUrlParameters> download_params( 1916 std::unique_ptr<DownloadUrlParameters> download_params(
1909 new DownloadUrlParameters(GetURL(), -1, -1, -1, 1917 new DownloadUrlParameters(GetURL(), -1, -1, -1,
1910 GetBrowserContext()->GetResourceContext())); 1918 storage_partition->GetURLRequestContext()));
1911 download_params->set_file_path(GetFullPath()); 1919 download_params->set_file_path(GetFullPath());
1912 download_params->set_offset(GetReceivedBytes()); 1920 download_params->set_offset(GetReceivedBytes());
1913 download_params->set_last_modified(GetLastModifiedTime()); 1921 download_params->set_last_modified(GetLastModifiedTime());
1914 download_params->set_etag(GetETag()); 1922 download_params->set_etag(GetETag());
1915 download_params->set_hash_of_partial_file(hash_); 1923 download_params->set_hash_of_partial_file(hash_);
1916 download_params->set_hash_state(std::move(hash_state_)); 1924 download_params->set_hash_state(std::move(hash_state_));
1917 1925
1918 // Note that resumed downloads disallow redirects. Hence the referrer URL 1926 // Note that resumed downloads disallow redirects. Hence the referrer URL
1919 // (which is the contents of the Referer header for the last download request) 1927 // (which is the contents of the Referer header for the last download request)
1920 // will only be sent to the URL returned by GetURL(). 1928 // will only be sent to the URL returned by GetURL().
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
2097 case RESUME_MODE_USER_CONTINUE: 2105 case RESUME_MODE_USER_CONTINUE:
2098 return "USER_CONTINUE"; 2106 return "USER_CONTINUE";
2099 case RESUME_MODE_USER_RESTART: 2107 case RESUME_MODE_USER_RESTART:
2100 return "USER_RESTART"; 2108 return "USER_RESTART";
2101 } 2109 }
2102 NOTREACHED() << "Unknown resume mode " << mode; 2110 NOTREACHED() << "Unknown resume mode " << mode;
2103 return "unknown"; 2111 return "unknown";
2104 } 2112 }
2105 2113
2106 } // namespace content 2114 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_item_impl.h ('k') | content/browser/download/download_item_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698