| 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_request_core.h" | 5 #include "content/browser/download/download_request_core.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback_helpers.h" | 10 #include "base/callback_helpers.h" |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 static void Attach(net::URLRequest* request, | 58 static void Attach(net::URLRequest* request, |
| 59 DownloadUrlParameters* download_parameters, | 59 DownloadUrlParameters* download_parameters, |
| 60 uint32_t download_id); | 60 uint32_t download_id); |
| 61 static DownloadRequestData* Get(net::URLRequest* request); | 61 static DownloadRequestData* Get(net::URLRequest* request); |
| 62 static void Detach(net::URLRequest* request); | 62 static void Detach(net::URLRequest* request); |
| 63 | 63 |
| 64 std::unique_ptr<DownloadSaveInfo> TakeSaveInfo() { | 64 std::unique_ptr<DownloadSaveInfo> TakeSaveInfo() { |
| 65 return std::move(save_info_); | 65 return std::move(save_info_); |
| 66 } | 66 } |
| 67 uint32_t download_id() const { return download_id_; } | 67 uint32_t download_id() const { return download_id_; } |
| 68 std::string guid() const { return guid_; } |
| 68 bool is_transient() const { return transient_; } | 69 bool is_transient() const { return transient_; } |
| 69 const DownloadUrlParameters::OnStartedCallback& callback() const { | 70 const DownloadUrlParameters::OnStartedCallback& callback() const { |
| 70 return on_started_callback_; | 71 return on_started_callback_; |
| 71 } | 72 } |
| 72 | 73 |
| 73 private: | 74 private: |
| 74 static const int kKey; | 75 static const int kKey; |
| 75 | 76 |
| 76 std::unique_ptr<DownloadSaveInfo> save_info_; | 77 std::unique_ptr<DownloadSaveInfo> save_info_; |
| 77 uint32_t download_id_ = DownloadItem::kInvalidId; | 78 uint32_t download_id_ = DownloadItem::kInvalidId; |
| 79 std::string guid_; |
| 78 bool transient_ = false; | 80 bool transient_ = false; |
| 79 DownloadUrlParameters::OnStartedCallback on_started_callback_; | 81 DownloadUrlParameters::OnStartedCallback on_started_callback_; |
| 80 }; | 82 }; |
| 81 | 83 |
| 82 // static | 84 // static |
| 83 const int DownloadRequestData::kKey = 0; | 85 const int DownloadRequestData::kKey = 0; |
| 84 | 86 |
| 85 // static | 87 // static |
| 86 void DownloadRequestData::Attach(net::URLRequest* request, | 88 void DownloadRequestData::Attach(net::URLRequest* request, |
| 87 DownloadUrlParameters* parameters, | 89 DownloadUrlParameters* parameters, |
| 88 uint32_t download_id) { | 90 uint32_t download_id) { |
| 89 auto request_data = base::MakeUnique<DownloadRequestData>(); | 91 auto request_data = base::MakeUnique<DownloadRequestData>(); |
| 90 request_data->save_info_.reset( | 92 request_data->save_info_.reset( |
| 91 new DownloadSaveInfo(parameters->GetSaveInfo())); | 93 new DownloadSaveInfo(parameters->GetSaveInfo())); |
| 92 request_data->download_id_ = download_id; | 94 request_data->download_id_ = download_id; |
| 95 request_data->guid_ = parameters->guid(); |
| 93 request_data->transient_ = parameters->is_transient(); | 96 request_data->transient_ = parameters->is_transient(); |
| 94 request_data->on_started_callback_ = parameters->callback(); | 97 request_data->on_started_callback_ = parameters->callback(); |
| 95 request->SetUserData(&kKey, std::move(request_data)); | 98 request->SetUserData(&kKey, std::move(request_data)); |
| 96 } | 99 } |
| 97 | 100 |
| 98 // static | 101 // static |
| 99 DownloadRequestData* DownloadRequestData::Get(net::URLRequest* request) { | 102 DownloadRequestData* DownloadRequestData::Get(net::URLRequest* request) { |
| 100 return static_cast<DownloadRequestData*>(request->GetUserData(&kKey)); | 103 return static_cast<DownloadRequestData*>(request->GetUserData(&kKey)); |
| 101 } | 104 } |
| 102 | 105 |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 214 device::mojom::WakeLockReason::ReasonOther, "Download in progress", | 217 device::mojom::WakeLockReason::ReasonOther, "Download in progress", |
| 215 mojo::MakeRequest(&wake_lock_)); | 218 mojo::MakeRequest(&wake_lock_)); |
| 216 | 219 |
| 217 wake_lock_->RequestWakeLock(); | 220 wake_lock_->RequestWakeLock(); |
| 218 } | 221 } |
| 219 | 222 |
| 220 DownloadRequestData* request_data = DownloadRequestData::Get(request_); | 223 DownloadRequestData* request_data = DownloadRequestData::Get(request_); |
| 221 if (request_data) { | 224 if (request_data) { |
| 222 save_info_ = request_data->TakeSaveInfo(); | 225 save_info_ = request_data->TakeSaveInfo(); |
| 223 download_id_ = request_data->download_id(); | 226 download_id_ = request_data->download_id(); |
| 227 guid_ = request_data->guid(); |
| 224 transient_ = request_data->is_transient(); | 228 transient_ = request_data->is_transient(); |
| 225 on_started_callback_ = request_data->callback(); | 229 on_started_callback_ = request_data->callback(); |
| 226 DownloadRequestData::Detach(request_); | 230 DownloadRequestData::Detach(request_); |
| 227 is_partial_request_ = save_info_->offset > 0; | 231 is_partial_request_ = save_info_->offset > 0; |
| 228 } else { | 232 } else { |
| 229 save_info_.reset(new DownloadSaveInfo); | 233 save_info_.reset(new DownloadSaveInfo); |
| 230 } | 234 } |
| 231 } | 235 } |
| 232 | 236 |
| 233 DownloadRequestCore::~DownloadRequestCore() { | 237 DownloadRequestCore::~DownloadRequestCore() { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 244 std::unique_ptr<DownloadCreateInfo> create_info(new DownloadCreateInfo( | 248 std::unique_ptr<DownloadCreateInfo> create_info(new DownloadCreateInfo( |
| 245 base::Time::Now(), request()->net_log(), std::move(save_info_))); | 249 base::Time::Now(), request()->net_log(), std::move(save_info_))); |
| 246 | 250 |
| 247 if (result == DOWNLOAD_INTERRUPT_REASON_NONE) | 251 if (result == DOWNLOAD_INTERRUPT_REASON_NONE) |
| 248 create_info->remote_address = request()->GetSocketAddress().host(); | 252 create_info->remote_address = request()->GetSocketAddress().host(); |
| 249 create_info->connection_info = request()->response_info().connection_info; | 253 create_info->connection_info = request()->response_info().connection_info; |
| 250 create_info->url_chain = request()->url_chain(); | 254 create_info->url_chain = request()->url_chain(); |
| 251 create_info->referrer_url = GURL(request()->referrer()); | 255 create_info->referrer_url = GURL(request()->referrer()); |
| 252 create_info->result = result; | 256 create_info->result = result; |
| 253 create_info->download_id = download_id_; | 257 create_info->download_id = download_id_; |
| 258 create_info->guid = guid_; |
| 254 create_info->transient = transient_; | 259 create_info->transient = transient_; |
| 255 create_info->response_headers = request()->response_headers(); | 260 create_info->response_headers = request()->response_headers(); |
| 256 create_info->offset = create_info->save_info->offset; | 261 create_info->offset = create_info->save_info->offset; |
| 257 return create_info; | 262 return create_info; |
| 258 } | 263 } |
| 259 | 264 |
| 260 bool DownloadRequestCore::OnResponseStarted( | 265 bool DownloadRequestCore::OnResponseStarted( |
| 261 const std::string& override_mime_type) { | 266 const std::string& override_mime_type) { |
| 262 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 267 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 263 DVLOG(20) << __func__ << "() " << DebugString(); | 268 DVLOG(20) << __func__ << "() " << DebugString(); |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 // old servers that didn't implement "If-Match" and must be ignored when | 718 // old servers that didn't implement "If-Match" and must be ignored when |
| 714 // "If-Match" presents. | 719 // "If-Match" presents. |
| 715 if (has_last_modified) { | 720 if (has_last_modified) { |
| 716 request->SetExtraRequestHeaderByName( | 721 request->SetExtraRequestHeaderByName( |
| 717 net::HttpRequestHeaders::kIfUnmodifiedSince, params->last_modified(), | 722 net::HttpRequestHeaders::kIfUnmodifiedSince, params->last_modified(), |
| 718 true); | 723 true); |
| 719 } | 724 } |
| 720 } | 725 } |
| 721 | 726 |
| 722 } // namespace content | 727 } // namespace content |
| OLD | NEW |