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

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

Issue 7825035: Implement chrome.experimental.downloads.search() (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: rewrite Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_item.h" 5 #include "content/browser/download/download_item.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 const int kUpdateTimeMs = 1000; 56 const int kUpdateTimeMs = 1000;
57 57
58 static void DeleteDownloadedFile(const FilePath& path) { 58 static void DeleteDownloadedFile(const FilePath& path) {
59 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 59 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
60 60
61 // Make sure we only delete files. 61 // Make sure we only delete files.
62 if (!file_util::DirectoryExists(path)) 62 if (!file_util::DirectoryExists(path))
63 file_util::Delete(path, false); 63 file_util::Delete(path, false);
64 } 64 }
65 65
66 const char* DebugSafetyStateString(DownloadItem::SafetyState state) { 66 const char* DebugSafetyStateString(DownloadItemInterface::SafetyState state) {
67 switch (state) { 67 switch (state) {
68 case DownloadItem::SAFE: 68 case DownloadItemInterface::SAFE:
69 return "SAFE"; 69 return "SAFE";
70 case DownloadItem::DANGEROUS: 70 case DownloadItemInterface::DANGEROUS:
71 return "DANGEROUS"; 71 return "DANGEROUS";
72 case DownloadItem::DANGEROUS_BUT_VALIDATED: 72 case DownloadItemInterface::DANGEROUS_BUT_VALIDATED:
73 return "DANGEROUS_BUT_VALIDATED"; 73 return "DANGEROUS_BUT_VALIDATED";
74 default: 74 default:
75 NOTREACHED() << "Unknown safety state " << state; 75 NOTREACHED() << "Unknown safety state " << state;
76 return "unknown"; 76 return "unknown";
77 }; 77 };
78 } 78 }
79 79
80 const char* DebugDownloadStateString(DownloadItem::DownloadState state) { 80 const char* DebugDownloadStateString(
81 DownloadItemInterface::DownloadState state) {
81 switch (state) { 82 switch (state) {
82 case DownloadItem::IN_PROGRESS: 83 case DownloadItemInterface::IN_PROGRESS:
83 return "IN_PROGRESS"; 84 return "IN_PROGRESS";
84 case DownloadItem::COMPLETE: 85 case DownloadItemInterface::COMPLETE:
85 return "COMPLETE"; 86 return "COMPLETE";
86 case DownloadItem::CANCELLED: 87 case DownloadItemInterface::CANCELLED:
87 return "CANCELLED"; 88 return "CANCELLED";
88 case DownloadItem::REMOVING: 89 case DownloadItemInterface::REMOVING:
89 return "REMOVING"; 90 return "REMOVING";
90 case DownloadItem::INTERRUPTED: 91 case DownloadItemInterface::INTERRUPTED:
91 return "INTERRUPTED"; 92 return "INTERRUPTED";
92 default: 93 default:
93 NOTREACHED() << "Unknown download state " << state; 94 NOTREACHED() << "Unknown download state " << state;
94 return "unknown"; 95 return "unknown";
95 }; 96 };
96 } 97 }
97 98
98 DownloadItem::SafetyState GetSafetyState(bool dangerous_file, 99 DownloadItemInterface::SafetyState GetSafetyState(bool dangerous_file,
99 bool dangerous_url) { 100 bool dangerous_url) {
100 return (dangerous_url || dangerous_file) ? 101 return (dangerous_url || dangerous_file) ?
101 DownloadItem::DANGEROUS : DownloadItem::SAFE; 102 DownloadItemInterface::DANGEROUS : DownloadItemInterface::SAFE;
102 } 103 }
103 104
104 // Note: When a download has both |dangerous_file| and |dangerous_url| set, 105 // Note: When a download has both |dangerous_file| and |dangerous_url| set,
105 // danger type is set to DANGEROUS_URL since the risk of dangerous URL 106 // danger type is set to DANGEROUS_URL since the risk of dangerous URL
106 // overweights that of dangerous file type. 107 // overweights that of dangerous file type.
107 DownloadItem::DangerType GetDangerType(bool dangerous_file, 108 DownloadItemInterface::DangerType GetDangerType(bool dangerous_file,
108 bool dangerous_url) { 109 bool dangerous_url) {
109 if (dangerous_url) { 110 if (dangerous_url) {
110 // dangerous URL overweights dangerous file. We check dangerous URL first. 111 // dangerous URL overweights dangerous file. We check dangerous URL first.
111 return DownloadItem::DANGEROUS_URL; 112 return DownloadItemInterface::DANGEROUS_URL;
112 } 113 }
113 return dangerous_file ? 114 return dangerous_file ? DownloadItemInterface::DANGEROUS_FILE
114 DownloadItem::DANGEROUS_FILE : DownloadItem::NOT_DANGEROUS; 115 : DownloadItemInterface::NOT_DANGEROUS;
115 } 116 }
116 117
117 } // namespace 118 } // namespace
118 119
119 // Our download table ID starts at 1, so we use 0 to represent a download that 120 // Our download table ID starts at 1, so we use 0 to represent a download that
120 // has started, but has not yet had its data persisted in the table. We use fake 121 // has started, but has not yet had its data persisted in the table. We use fake
121 // database handles in incognito mode starting at -1 and progressively getting 122 // database handles in incognito mode starting at -1 and progressively getting
122 // more negative. 123 // more negative.
123 // static 124 // static
124 const int DownloadItem::kUninitializedHandle = 0; 125 const int DownloadItem::kUninitializedHandle = 0;
125 126
126 // Constructor for reading from the history service. 127 // Constructor for reading from the history service.
127 DownloadItem::DownloadItem(DownloadManager* download_manager, 128 DownloadItem::DownloadItem(DownloadManager* download_manager,
128 const DownloadPersistentStoreInfo& info) 129 const DownloadPersistentStoreInfo& info)
129 : download_id_(download_manager->GetNextId()), 130 : download_id_(download_manager->GetNextId()),
130 full_path_(info.path), 131 full_path_(info.path),
131 url_chain_(1, info.url), 132 url_chain_(1, info.url),
132 referrer_url_(info.referrer_url), 133 referrer_url_(info.referrer_url),
133 total_bytes_(info.total_bytes), 134 total_bytes_(info.total_bytes),
134 received_bytes_(info.received_bytes), 135 received_bytes_(info.received_bytes),
135 start_tick_(base::TimeTicks()), 136 start_tick_(base::TimeTicks()),
136 state_(static_cast<DownloadState>(info.state)), 137 state_(static_cast<DownloadItemInterface::DownloadState>(info.state)),
137 start_time_(info.start_time), 138 start_time_(info.start_time),
138 end_time_(info.end_time), 139 end_time_(info.end_time),
139 db_handle_(info.db_handle), 140 db_handle_(info.db_handle),
140 download_manager_(download_manager), 141 download_manager_(download_manager),
141 is_paused_(false), 142 is_paused_(false),
142 open_when_complete_(false), 143 open_when_complete_(false),
143 file_externally_removed_(false), 144 file_externally_removed_(false),
144 safety_state_(SAFE), 145 safety_state_(DownloadItemInterface::SAFE),
145 auto_opened_(false), 146 auto_opened_(false),
146 is_otr_(false), 147 is_otr_(false),
147 is_temporary_(false), 148 is_temporary_(false),
148 all_data_saved_(false), 149 all_data_saved_(false),
149 opened_(info.opened), 150 opened_(info.opened),
150 open_enabled_(true), 151 open_enabled_(true),
151 delegate_delayed_complete_(false) { 152 delegate_delayed_complete_(false) {
152 if (IsInProgress()) 153 if (IsInProgress())
153 state_ = CANCELLED; 154 state_ = DownloadItemInterface::CANCELLED;
154 if (IsComplete()) 155 if (IsComplete())
155 all_data_saved_ = true; 156 all_data_saved_ = true;
156 Init(false /* not actively downloading */); 157 Init(false /* not actively downloading */);
157 } 158 }
158 159
159 // Constructing for a regular download: 160 // Constructing for a regular download:
160 DownloadItem::DownloadItem(DownloadManager* download_manager, 161 DownloadItem::DownloadItem(DownloadManager* download_manager,
161 const DownloadCreateInfo& info, 162 const DownloadCreateInfo& info,
162 DownloadRequestHandleInterface* request_handle, 163 DownloadRequestHandleInterface* request_handle,
163 bool is_otr) 164 bool is_otr)
164 : state_info_(info.original_name, info.save_info.file_path, 165 : state_info_(info.original_name, info.save_info.file_path,
165 info.has_user_gesture, info.transition_type, 166 info.has_user_gesture, info.transition_type,
166 info.prompt_user_for_save_location, info.path_uniquifier, 167 info.prompt_user_for_save_location, info.path_uniquifier,
167 false, false), 168 false, false),
168 request_handle_(request_handle), 169 request_handle_(request_handle),
169 download_id_(info.download_id), 170 download_id_(info.download_id),
170 full_path_(info.path), 171 full_path_(info.path),
171 url_chain_(info.url_chain), 172 url_chain_(info.url_chain),
172 referrer_url_(info.referrer_url), 173 referrer_url_(info.referrer_url),
173 suggested_filename_(UTF16ToUTF8(info.save_info.suggested_name)), 174 suggested_filename_(UTF16ToUTF8(info.save_info.suggested_name)),
174 content_disposition_(info.content_disposition), 175 content_disposition_(info.content_disposition),
175 mime_type_(info.mime_type), 176 mime_type_(info.mime_type),
176 original_mime_type_(info.original_mime_type), 177 original_mime_type_(info.original_mime_type),
177 referrer_charset_(info.referrer_charset), 178 referrer_charset_(info.referrer_charset),
178 total_bytes_(info.total_bytes), 179 total_bytes_(info.total_bytes),
179 received_bytes_(0), 180 received_bytes_(0),
180 last_reason_(DOWNLOAD_INTERRUPT_REASON_NONE), 181 last_reason_(DOWNLOAD_INTERRUPT_REASON_NONE),
181 start_tick_(base::TimeTicks::Now()), 182 start_tick_(base::TimeTicks::Now()),
182 state_(IN_PROGRESS), 183 state_(DownloadItemInterface::IN_PROGRESS),
183 start_time_(info.start_time), 184 start_time_(info.start_time),
184 db_handle_(DownloadItem::kUninitializedHandle), 185 db_handle_(DownloadItem::kUninitializedHandle),
185 download_manager_(download_manager), 186 download_manager_(download_manager),
186 is_paused_(false), 187 is_paused_(false),
187 open_when_complete_(false), 188 open_when_complete_(false),
188 file_externally_removed_(false), 189 file_externally_removed_(false),
189 safety_state_(SAFE), 190 safety_state_(DownloadItemInterface::SAFE),
190 auto_opened_(false), 191 auto_opened_(false),
191 is_otr_(is_otr), 192 is_otr_(is_otr),
192 is_temporary_(!info.save_info.file_path.empty()), 193 is_temporary_(!info.save_info.file_path.empty()),
193 all_data_saved_(false), 194 all_data_saved_(false),
194 opened_(false), 195 opened_(false),
195 open_enabled_(true), 196 open_enabled_(true),
196 delegate_delayed_complete_(false) { 197 delegate_delayed_complete_(false) {
197 Init(true /* actively downloading */); 198 Init(true /* actively downloading */);
198 } 199 }
199 200
200 // Constructing for the "Save Page As..." feature: 201 // Constructing for the "Save Page As..." feature:
201 DownloadItem::DownloadItem(DownloadManager* download_manager, 202 DownloadItem::DownloadItem(DownloadManager* download_manager,
202 const FilePath& path, 203 const FilePath& path,
203 const GURL& url, 204 const GURL& url,
204 bool is_otr, 205 bool is_otr,
205 DownloadId download_id) 206 DownloadId download_id)
206 : download_id_(download_id), 207 : download_id_(download_id),
207 full_path_(path), 208 full_path_(path),
208 url_chain_(1, url), 209 url_chain_(1, url),
209 referrer_url_(GURL()), 210 referrer_url_(GURL()),
210 total_bytes_(0), 211 total_bytes_(0),
211 received_bytes_(0), 212 received_bytes_(0),
212 last_reason_(DOWNLOAD_INTERRUPT_REASON_NONE), 213 last_reason_(DOWNLOAD_INTERRUPT_REASON_NONE),
213 start_tick_(base::TimeTicks::Now()), 214 start_tick_(base::TimeTicks::Now()),
214 state_(IN_PROGRESS), 215 state_(DownloadItemInterface::IN_PROGRESS),
215 start_time_(base::Time::Now()), 216 start_time_(base::Time::Now()),
216 db_handle_(DownloadItem::kUninitializedHandle), 217 db_handle_(DownloadItem::kUninitializedHandle),
217 download_manager_(download_manager), 218 download_manager_(download_manager),
218 is_paused_(false), 219 is_paused_(false),
219 open_when_complete_(false), 220 open_when_complete_(false),
220 file_externally_removed_(false), 221 file_externally_removed_(false),
221 safety_state_(SAFE), 222 safety_state_(DownloadItemInterface::SAFE),
222 auto_opened_(false), 223 auto_opened_(false),
223 is_otr_(is_otr), 224 is_otr_(is_otr),
224 is_temporary_(false), 225 is_temporary_(false),
225 all_data_saved_(false), 226 all_data_saved_(false),
226 opened_(false), 227 opened_(false),
227 open_enabled_(true), 228 open_enabled_(true),
228 delegate_delayed_complete_(false) { 229 delegate_delayed_complete_(false) {
229 Init(true /* actively downloading */); 230 Init(true /* actively downloading */);
230 } 231 }
231 232
232 DownloadItem::~DownloadItem() { 233 DownloadItem::~DownloadItem() {
233 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 234 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
234 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 235 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
235 236
236 TransitionTo(REMOVING); 237 TransitionTo(DownloadItemInterface::REMOVING);
237 download_manager_->AssertQueueStateConsistent(this); 238 download_manager_->AssertQueueStateConsistent(this);
238 } 239 }
239 240
240 void DownloadItem::AddObserver(Observer* observer) { 241 void DownloadItem::AddObserver(Observer* observer) {
241 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 242 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
242 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 243 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
243 244
244 observers_.AddObserver(observer); 245 observers_.AddObserver(observer);
245 } 246 }
246 247
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 304
304 void DownloadItem::ShowDownloadInShell() { 305 void DownloadItem::ShowDownloadInShell() {
305 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 306 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
306 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 307 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
307 308
308 content::GetContentClient()->browser()->ShowItemInFolder(full_path()); 309 content::GetContentClient()->browser()->ShowItemInFolder(full_path());
309 } 310 }
310 311
311 void DownloadItem::DangerousDownloadValidated() { 312 void DownloadItem::DangerousDownloadValidated() {
312 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 313 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
313 DCHECK_EQ(DANGEROUS, safety_state()); 314 DCHECK_EQ(DownloadItemInterface::DANGEROUS, safety_state());
314 315
315 UMA_HISTOGRAM_ENUMERATION("Download.DangerousDownloadValidated", 316 UMA_HISTOGRAM_ENUMERATION("Download.DangerousDownloadValidated",
316 GetDangerType(), 317 GetDangerType(),
317 DANGEROUS_TYPE_MAX); 318 DownloadItemInterface::DANGEROUS_TYPE_MAX);
318 319
319 safety_state_ = DANGEROUS_BUT_VALIDATED; 320 safety_state_ = DownloadItemInterface::DANGEROUS_BUT_VALIDATED;
320 UpdateObservers(); 321 UpdateObservers();
321 322
322 download_manager_->MaybeCompleteDownload(this); 323 download_manager_->MaybeCompleteDownload(this);
323 } 324 }
324 325
325 void DownloadItem::UpdateSize(int64 bytes_so_far) { 326 void DownloadItem::UpdateSize(int64 bytes_so_far) {
326 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 327 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
327 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 328 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
328 329
329 received_bytes_ = bytes_so_far; 330 received_bytes_ = bytes_so_far;
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 377
377 VLOG(20) << __FUNCTION__ << "() download = " << DebugString(true); 378 VLOG(20) << __FUNCTION__ << "() download = " << DebugString(true);
378 if (!IsPartialDownload()) { 379 if (!IsPartialDownload()) {
379 // Small downloads might be complete before this method has 380 // Small downloads might be complete before this method has
380 // a chance to run. 381 // a chance to run.
381 return; 382 return;
382 } 383 }
383 384
384 download_stats::RecordDownloadCount(download_stats::CANCELLED_COUNT); 385 download_stats::RecordDownloadCount(download_stats::CANCELLED_COUNT);
385 386
386 TransitionTo(CANCELLED); 387 TransitionTo(DownloadItemInterface::CANCELLED);
387 StopProgressTimer(); 388 StopProgressTimer();
388 if (user_cancel) 389 if (user_cancel)
389 download_manager_->DownloadCancelledInternal(this); 390 download_manager_->DownloadCancelledInternal(this);
390 } 391 }
391 392
392 void DownloadItem::MarkAsComplete() { 393 void DownloadItem::MarkAsComplete() {
393 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 394 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
394 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 395 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
395 396
396 DCHECK(all_data_saved_); 397 DCHECK(all_data_saved_);
397 end_time_ = base::Time::Now(); 398 end_time_ = base::Time::Now();
398 TransitionTo(COMPLETE); 399 TransitionTo(DownloadItemInterface::COMPLETE);
399 } 400 }
400 401
401 void DownloadItem::DelayedDownloadOpened() { 402 void DownloadItem::DelayedDownloadOpened() {
402 auto_opened_ = true; 403 auto_opened_ = true;
403 Completed(); 404 Completed();
404 } 405 }
405 406
406 void DownloadItem::OnAllDataSaved(int64 size) { 407 void DownloadItem::OnAllDataSaved(int64 size) {
407 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 408 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
408 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 409 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
(...skipping 10 matching lines...) Expand all
419 } 420 }
420 421
421 void DownloadItem::Completed() { 422 void DownloadItem::Completed() {
422 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 423 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
423 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 424 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
424 425
425 VLOG(20) << __FUNCTION__ << "() " << DebugString(false); 426 VLOG(20) << __FUNCTION__ << "() " << DebugString(false);
426 427
427 DCHECK(all_data_saved_); 428 DCHECK(all_data_saved_);
428 end_time_ = base::Time::Now(); 429 end_time_ = base::Time::Now();
429 TransitionTo(COMPLETE); 430 TransitionTo(DownloadItemInterface::COMPLETE);
430 download_manager_->DownloadCompleted(id()); 431 download_manager_->DownloadCompleted(id());
431 download_stats::RecordDownloadCompleted(start_tick_, received_bytes_); 432 download_stats::RecordDownloadCompleted(start_tick_, received_bytes_);
432 433
433 if (auto_opened_) { 434 if (auto_opened_) {
434 // If it was already handled by the delegate, do nothing. 435 // If it was already handled by the delegate, do nothing.
435 } else if (open_when_complete() || 436 } else if (open_when_complete() ||
436 ShouldOpenFileBasedOnExtension() || 437 ShouldOpenFileBasedOnExtension() ||
437 is_temporary()) { 438 is_temporary()) {
438 // If the download is temporary, like in drag-and-drop, do not open it but 439 // If the download is temporary, like in drag-and-drop, do not open it but
439 // we still need to set it auto-opened so that it can be removed from the 440 // we still need to set it auto-opened so that it can be removed from the
440 // download shelf. 441 // download shelf.
441 if (!is_temporary()) 442 if (!is_temporary())
442 OpenDownload(); 443 OpenDownload();
443 444
444 auto_opened_ = true; 445 auto_opened_ = true;
445 UpdateObservers(); 446 UpdateObservers();
446 } 447 }
447 } 448 }
448 449
449 void DownloadItem::TransitionTo(DownloadState new_state) { 450 void DownloadItem::TransitionTo(
451 DownloadItemInterface::DownloadState new_state) {
450 if (state_ == new_state) 452 if (state_ == new_state)
451 return; 453 return;
452 454
453 state_ = new_state; 455 state_ = new_state;
454 UpdateObservers(); 456 UpdateObservers();
455 } 457 }
456 458
457 void DownloadItem::UpdateSafetyState() { 459 void DownloadItem::UpdateSafetyState() {
458 SafetyState updated_value( 460 DownloadItemInterface::SafetyState updated_value(
459 GetSafetyState(state_info_.is_dangerous_file, 461 GetSafetyState(state_info_.is_dangerous_file,
460 state_info_.is_dangerous_url)); 462 state_info_.is_dangerous_url));
461 if (updated_value != safety_state_) { 463 if (updated_value != safety_state_) {
462 safety_state_ = updated_value; 464 safety_state_ = updated_value;
463 UpdateObservers(); 465 UpdateObservers();
464 } 466 }
465 } 467 }
466 468
467 void DownloadItem::UpdateTarget() { 469 void DownloadItem::UpdateTarget() {
468 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 470 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
469 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 471 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
470 472
471 if (state_info_.target_name.value().empty()) 473 if (state_info_.target_name.value().empty())
472 state_info_.target_name = full_path_.BaseName(); 474 state_info_.target_name = full_path_.BaseName();
473 } 475 }
474 476
475 void DownloadItem::Interrupted(int64 size, InterruptReason reason) { 477 void DownloadItem::Interrupted(int64 size, InterruptReason reason) {
476 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 478 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
477 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 479 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
478 480
479 if (!IsInProgress()) 481 if (!IsInProgress())
480 return; 482 return;
481 483
482 last_reason_ = reason; 484 last_reason_ = reason;
483 UpdateSize(size); 485 UpdateSize(size);
484 StopProgressTimer(); 486 StopProgressTimer();
485 download_stats::RecordDownloadInterrupted(reason, 487 download_stats::RecordDownloadInterrupted(reason,
486 received_bytes_, 488 received_bytes_,
487 total_bytes_); 489 total_bytes_);
488 TransitionTo(INTERRUPTED); 490 TransitionTo(DownloadItemInterface::INTERRUPTED);
489 } 491 }
490 492
491 void DownloadItem::Delete(DeleteReason reason) { 493 void DownloadItem::Delete(DeleteReason reason) {
492 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 494 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
493 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 495 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
494 496
495 switch (reason) { 497 switch (reason) {
496 case DELETE_DUE_TO_USER_DISCARD: 498 case DELETE_DUE_TO_USER_DISCARD:
497 UMA_HISTOGRAM_ENUMERATION("Download.UserDiscard", GetDangerType(), 499 UMA_HISTOGRAM_ENUMERATION("Download.UserDiscard", GetDangerType(),
498 DANGEROUS_TYPE_MAX); 500 DownloadItemInterface::DANGEROUS_TYPE_MAX);
499 break; 501 break;
500 case DELETE_DUE_TO_BROWSER_SHUTDOWN: 502 case DELETE_DUE_TO_BROWSER_SHUTDOWN:
501 UMA_HISTOGRAM_ENUMERATION("Download.Discard", GetDangerType(), 503 UMA_HISTOGRAM_ENUMERATION("Download.Discard", GetDangerType(),
502 DANGEROUS_TYPE_MAX); 504 DownloadItemInterface::DANGEROUS_TYPE_MAX);
503 break; 505 break;
504 default: 506 default:
505 NOTREACHED(); 507 NOTREACHED();
506 } 508 }
507 509
508 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 510 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
509 base::Bind(&DeleteDownloadedFile, full_path_)); 511 base::Bind(&DeleteDownloadedFile, full_path_));
510 Remove(); 512 Remove();
511 // We have now been deleted. 513 // We have now been deleted.
512 } 514 }
513 515
514 void DownloadItem::Remove() { 516 void DownloadItem::Remove() {
515 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 517 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
516 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 518 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
517 519
518 download_manager_->AssertQueueStateConsistent(this); 520 download_manager_->AssertQueueStateConsistent(this);
519 Cancel(true); 521 Cancel(true);
520 download_manager_->AssertQueueStateConsistent(this); 522 download_manager_->AssertQueueStateConsistent(this);
521 523
522 TransitionTo(REMOVING); 524 TransitionTo(DownloadItemInterface::REMOVING);
523 download_manager_->RemoveDownload(db_handle_); 525 download_manager_->RemoveDownload(db_handle_);
524 // We have now been deleted. 526 // We have now been deleted.
525 } 527 }
526 528
527 bool DownloadItem::TimeRemaining(base::TimeDelta* remaining) const { 529 bool DownloadItem::TimeRemaining(base::TimeDelta* remaining) const {
528 if (total_bytes_ <= 0) 530 if (total_bytes_ <= 0)
529 return false; // We never received the content_length for this download. 531 return false; // We never received the content_length for this download.
530 532
531 int64 speed = CurrentSpeed(); 533 int64 speed = CurrentSpeed();
532 if (speed == 0) 534 if (speed == 0)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 UpdateObservers(); 585 UpdateObservers();
584 } 586 }
585 587
586 void DownloadItem::OnDownloadCompleting(DownloadFileManager* file_manager) { 588 void DownloadItem::OnDownloadCompleting(DownloadFileManager* file_manager) {
587 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 589 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
588 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 590 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
589 591
590 VLOG(20) << __FUNCTION__ << "()" 592 VLOG(20) << __FUNCTION__ << "()"
591 << " needs rename = " << NeedsRename() 593 << " needs rename = " << NeedsRename()
592 << " " << DebugString(true); 594 << " " << DebugString(true);
593 DCHECK_NE(DANGEROUS, safety_state()); 595 DCHECK_NE(DownloadItemInterface::DANGEROUS, safety_state());
594 DCHECK(file_manager); 596 DCHECK(file_manager);
595 597
596 if (NeedsRename()) { 598 if (NeedsRename()) {
597 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 599 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
598 base::Bind(&DownloadFileManager::RenameCompletingDownloadFile, 600 base::Bind(&DownloadFileManager::RenameCompletingDownloadFile,
599 file_manager, global_id(), 601 file_manager, global_id(),
600 GetTargetFilePath(), safety_state() == SAFE)); 602 GetTargetFilePath(), safety_state() == DownloadItemInterface: :SAFE));
601 return; 603 return;
602 } 604 }
603 605
604 Completed(); 606 Completed();
605 607
606 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 608 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
607 base::Bind(&DownloadFileManager::CompleteDownload, 609 base::Bind(&DownloadFileManager::CompleteDownload,
608 file_manager, global_id())); 610 file_manager, global_id()));
609 } 611 }
610 612
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 660 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
659 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 661 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
660 662
661 VLOG(20) << " " << __FUNCTION__ << "()" << " this = " << DebugString(true); 663 VLOG(20) << " " << __FUNCTION__ << "()" << " this = " << DebugString(true);
662 state_info_ = state; 664 state_info_ = state;
663 VLOG(20) << " " << __FUNCTION__ << "()" << " this = " << DebugString(true); 665 VLOG(20) << " " << __FUNCTION__ << "()" << " this = " << DebugString(true);
664 666
665 UpdateSafetyState(); 667 UpdateSafetyState();
666 } 668 }
667 669
668 DownloadItem::DangerType DownloadItem::GetDangerType() const { 670 DownloadItemInterface::DangerType DownloadItem::GetDangerType() const {
669 return ::GetDangerType(state_info_.is_dangerous_file, 671 return ::GetDangerType(state_info_.is_dangerous_file,
670 state_info_.is_dangerous_url); 672 state_info_.is_dangerous_url);
671 } 673 }
672 674
673 bool DownloadItem::IsDangerous() const { 675 bool DownloadItem::IsDangerous() const {
674 return GetDangerType() != DownloadItem::NOT_DANGEROUS; 676 return GetDangerType() != DownloadItemInterface::NOT_DANGEROUS;
675 } 677 }
676 678
677 void DownloadItem::MarkFileDangerous() { 679 void DownloadItem::MarkFileDangerous() {
678 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 680 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
679 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 681 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
680 682
681 state_info_.is_dangerous_file = true; 683 state_info_.is_dangerous_file = true;
682 UpdateSafetyState(); 684 UpdateSafetyState();
683 } 685 }
684 686
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 FilePath DownloadItem::GetFileNameToReportUser() const { 718 FilePath DownloadItem::GetFileNameToReportUser() const {
717 if (state_info_.path_uniquifier > 0) { 719 if (state_info_.path_uniquifier > 0) {
718 FilePath name(state_info_.target_name); 720 FilePath name(state_info_.target_name);
719 DownloadFile::AppendNumberToPath(&name, state_info_.path_uniquifier); 721 DownloadFile::AppendNumberToPath(&name, state_info_.path_uniquifier);
720 return name; 722 return name;
721 } 723 }
722 return state_info_.target_name; 724 return state_info_.target_name;
723 } 725 }
724 726
725 FilePath DownloadItem::GetUserVerifiedFilePath() const { 727 FilePath DownloadItem::GetUserVerifiedFilePath() const {
726 return (safety_state_ == DownloadItem::SAFE) ? 728 return (safety_state_ == DownloadItemInterface::SAFE) ?
727 GetTargetFilePath() : full_path_; 729 GetTargetFilePath() : full_path_;
728 } 730 }
729 731
730 void DownloadItem::OffThreadCancel(DownloadFileManager* file_manager) { 732 void DownloadItem::OffThreadCancel(DownloadFileManager* file_manager) {
731 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 733 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
732 request_handle_->CancelRequest(); 734 request_handle_->CancelRequest();
733 735
734 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, 736 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
735 base::Bind(&DownloadFileManager::CancelDownload, 737 base::Bind(&DownloadFileManager::CancelDownload,
736 file_manager, global_id())); 738 file_manager, global_id()));
737 } 739 }
738 740
739 void DownloadItem::Init(bool active) { 741 void DownloadItem::Init(bool active) {
740 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 742 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
741 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 743 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
742 744
743 UpdateTarget(); 745 UpdateTarget();
744 if (active) { 746 if (active) {
745 StartProgressTimer(); 747 StartProgressTimer();
746 download_stats::RecordDownloadCount(download_stats::START_COUNT); 748 download_stats::RecordDownloadCount(download_stats::START_COUNT);
747 } 749 }
748 VLOG(20) << __FUNCTION__ << "() " << DebugString(true); 750 VLOG(20) << __FUNCTION__ << "() " << DebugString(true);
749 } 751 }
750 752
751 // TODO(ahendrickson) -- Move |INTERRUPTED| from |IsCancelled()| to 753 // TODO(ahendrickson) -- Move |INTERRUPTED| from |IsCancelled()| to
752 // |IsPartialDownload()|, when resuming interrupted downloads is implemented. 754 // |IsPartialDownload()|, when resuming interrupted downloads is implemented.
753 bool DownloadItem::IsPartialDownload() const { 755 bool DownloadItem::IsPartialDownload() const {
754 return (state_ == IN_PROGRESS); 756 return (state_ == DownloadItemInterface::IN_PROGRESS);
755 } 757 }
756 758
757 bool DownloadItem::IsInProgress() const { 759 bool DownloadItem::IsInProgress() const {
758 return (state_ == IN_PROGRESS); 760 return (state_ == DownloadItemInterface::IN_PROGRESS);
759 } 761 }
760 762
761 bool DownloadItem::IsCancelled() const { 763 bool DownloadItem::IsCancelled() const {
762 return (state_ == CANCELLED) || 764 return (state_ == DownloadItemInterface::CANCELLED) ||
763 (state_ == INTERRUPTED); 765 (state_ == DownloadItemInterface::INTERRUPTED);
764 } 766 }
765 767
766 bool DownloadItem::IsInterrupted() const { 768 bool DownloadItem::IsInterrupted() const {
767 return (state_ == INTERRUPTED); 769 return (state_ == DownloadItemInterface::INTERRUPTED);
768 } 770 }
769 771
770 bool DownloadItem::IsComplete() const { 772 bool DownloadItem::IsComplete() const {
771 return (state_ == COMPLETE); 773 return (state_ == DownloadItemInterface::COMPLETE);
772 } 774 }
773 775
774 const GURL& DownloadItem::GetURL() const { 776 const GURL& DownloadItem::GetURL() const {
775 return url_chain_.empty() ? 777 return url_chain_.empty() ?
776 GURL::EmptyGURL() : url_chain_.back(); 778 GURL::EmptyGURL() : url_chain_.back();
777 } 779 }
778 780
779 std::string DownloadItem::DebugString(bool verbose) const { 781 std::string DownloadItem::DebugString(bool verbose) const {
780 std::string description = 782 std::string description =
781 base::StringPrintf("{ id = %d" 783 base::StringPrintf("{ id = %d"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
818 state_info_.target_name.value().c_str(), 820 state_info_.target_name.value().c_str(),
819 full_path().value().c_str()); 821 full_path().value().c_str());
820 } else { 822 } else {
821 description += base::StringPrintf(" url = \"%s\"", url_list.c_str()); 823 description += base::StringPrintf(" url = \"%s\"", url_list.c_str());
822 } 824 }
823 825
824 description += " }"; 826 description += " }";
825 827
826 return description; 828 return description;
827 } 829 }
OLDNEW
« no previous file with comments | « content/browser/download/download_item.h ('k') | content/browser/download/download_item_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698