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

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

Issue 10950015: Shift "commit point" for when a download will no longer accept cancels. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync'd to LKGR. Created 8 years, 2 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 | Annotate | Revision Log
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_file_impl.h" 5 #include "content/browser/download/download_file_impl.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 53 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
54 power_save_blocker_(power_save_blocker.Pass()) { 54 power_save_blocker_(power_save_blocker.Pass()) {
55 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 55 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
56 DCHECK(download_manager.get()); 56 DCHECK(download_manager.get());
57 } 57 }
58 58
59 DownloadFileImpl::~DownloadFileImpl() { 59 DownloadFileImpl::~DownloadFileImpl() {
60 } 60 }
61 61
62 content::DownloadInterruptReason DownloadFileImpl::Initialize() { 62 content::DownloadInterruptReason DownloadFileImpl::Initialize() {
63 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
64
63 update_timer_.reset(new base::RepeatingTimer<DownloadFileImpl>()); 65 update_timer_.reset(new base::RepeatingTimer<DownloadFileImpl>());
64 net::Error result = file_.Initialize(default_download_directory_); 66 net::Error net_result = file_.Initialize(default_download_directory_);
65 if (result != net::OK) { 67 if (net_result != net::OK) {
66 return content::ConvertNetErrorToInterruptReason( 68 return content::ConvertNetErrorToInterruptReason(
67 result, content::DOWNLOAD_INTERRUPT_FROM_DISK); 69 net_result, content::DOWNLOAD_INTERRUPT_FROM_DISK);
68 } 70 }
69 71
70 stream_reader_->RegisterCallback( 72 stream_reader_->RegisterCallback(
71 base::Bind(&DownloadFileImpl::StreamActive, weak_factory_.GetWeakPtr())); 73 base::Bind(&DownloadFileImpl::StreamActive, weak_factory_.GetWeakPtr()));
72 74
73 download_start_ = base::TimeTicks::Now(); 75 download_start_ = base::TimeTicks::Now();
76
74 // Initial pull from the straw. 77 // Initial pull from the straw.
75 StreamActive(); 78 StreamActive();
76 79
77 return content::DOWNLOAD_INTERRUPT_REASON_NONE; 80 return content::DOWNLOAD_INTERRUPT_REASON_NONE;
78 } 81 }
79 82
80 content::DownloadInterruptReason DownloadFileImpl::AppendDataToFile( 83 content::DownloadInterruptReason DownloadFileImpl::AppendDataToFile(
81 const char* data, size_t data_len) { 84 const char* data, size_t data_len) {
82 if (!update_timer_->IsRunning()) { 85 if (!update_timer_->IsRunning()) {
83 update_timer_->Start(FROM_HERE, 86 update_timer_->Start(FROM_HERE,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 rename_error, 122 rename_error,
120 content::DOWNLOAD_INTERRUPT_FROM_DISK); 123 content::DOWNLOAD_INTERRUPT_FROM_DISK);
121 new_path.clear(); 124 new_path.clear();
122 } 125 }
123 126
124 BrowserThread::PostTask( 127 BrowserThread::PostTask(
125 BrowserThread::UI, FROM_HERE, 128 BrowserThread::UI, FROM_HERE,
126 base::Bind(callback, reason, new_path)); 129 base::Bind(callback, reason, new_path));
127 } 130 }
128 131
129 void DownloadFileImpl::Detach() { 132 void DownloadFileImpl::Detach(base::Closure callback) {
133 // Doing the annotation here leaves a small window during
134 // which the file has the final name but hasn't been marked with the
135 // Mark Of The Web. However, it allows anti-virus scanners on Windows
136 // to actually see the data (http://crbug.com/127999), and the Window
137 // is pretty small (round trip to the UI thread).
138 AnnotateWithSourceInformation();
139
130 file_.Detach(); 140 file_.Detach();
141
142 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback);
131 } 143 }
132 144
133 void DownloadFileImpl::Cancel() { 145 void DownloadFileImpl::Cancel() {
134 file_.Cancel(); 146 file_.Cancel();
135 } 147 }
136 148
137 void DownloadFileImpl::AnnotateWithSourceInformation() { 149 void DownloadFileImpl::AnnotateWithSourceInformation() {
138 bound_net_log_.BeginEvent(net::NetLog::TYPE_DOWNLOAD_FILE_ANNOTATED); 150 bound_net_log_.BeginEvent(net::NetLog::TYPE_DOWNLOAD_FILE_ANNOTATED);
139 file_.AnnotateWithSourceInformation(); 151 file_.AnnotateWithSourceInformation();
140 bound_net_log_.EndEvent(net::NetLog::TYPE_DOWNLOAD_FILE_ANNOTATED); 152 bound_net_log_.EndEvent(net::NetLog::TYPE_DOWNLOAD_FILE_ANNOTATED);
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 } 307 }
296 } 308 }
297 309
298 void DownloadFileImpl::SendUpdate() { 310 void DownloadFileImpl::SendUpdate() {
299 BrowserThread::PostTask( 311 BrowserThread::PostTask(
300 BrowserThread::UI, FROM_HERE, 312 BrowserThread::UI, FROM_HERE,
301 base::Bind(&DownloadManager::UpdateDownload, 313 base::Bind(&DownloadManager::UpdateDownload,
302 download_manager_, id_.local(), 314 download_manager_, id_.local(),
303 BytesSoFar(), CurrentSpeed(), GetHashState())); 315 BytesSoFar(), CurrentSpeed(), GetHashState()));
304 } 316 }
OLDNEW
« no previous file with comments | « content/browser/download/download_file_impl.h ('k') | content/browser/download/download_file_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698