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

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

Issue 8008021: Add new UMA stats to get a handle on Downloads UI Usage (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: comments Created 9 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) 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 "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/i18n/case_conversion.h" 10 #include "base/i18n/case_conversion.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 const DownloadPersistentStoreInfo& info) 122 const DownloadPersistentStoreInfo& info)
123 : download_id_(-1), 123 : download_id_(-1),
124 full_path_(info.path), 124 full_path_(info.path),
125 url_chain_(1, info.url), 125 url_chain_(1, info.url),
126 referrer_url_(info.referrer_url), 126 referrer_url_(info.referrer_url),
127 total_bytes_(info.total_bytes), 127 total_bytes_(info.total_bytes),
128 received_bytes_(info.received_bytes), 128 received_bytes_(info.received_bytes),
129 start_tick_(base::TimeTicks()), 129 start_tick_(base::TimeTicks()),
130 state_(static_cast<DownloadState>(info.state)), 130 state_(static_cast<DownloadState>(info.state)),
131 start_time_(info.start_time), 131 start_time_(info.start_time),
132 end_time_(info.end_time),
132 db_handle_(info.db_handle), 133 db_handle_(info.db_handle),
133 download_manager_(download_manager), 134 download_manager_(download_manager),
134 is_paused_(false), 135 is_paused_(false),
135 open_when_complete_(false), 136 open_when_complete_(false),
136 file_externally_removed_(false), 137 file_externally_removed_(false),
137 safety_state_(SAFE), 138 safety_state_(SAFE),
138 auto_opened_(false), 139 auto_opened_(false),
139 is_otr_(false), 140 is_otr_(false),
140 is_temporary_(false), 141 is_temporary_(false),
141 all_data_saved_(false), 142 all_data_saved_(false),
142 opened_(false), 143 opened_(info.opened),
143 open_enabled_(true), 144 open_enabled_(true),
144 delegate_delayed_complete_(false) { 145 delegate_delayed_complete_(false) {
145 if (IsInProgress()) 146 if (IsInProgress())
146 state_ = CANCELLED; 147 state_ = CANCELLED;
147 if (IsComplete()) 148 if (IsComplete())
148 all_data_saved_ = true; 149 all_data_saved_ = true;
149 Init(false /* not actively downloading */); 150 Init(false /* not actively downloading */);
150 } 151 }
151 152
152 // Constructing for a regular download: 153 // Constructing for a regular download:
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 } 278 }
278 279
279 if (!IsComplete() || file_externally_removed_) 280 if (!IsComplete() || file_externally_removed_)
280 return; 281 return;
281 282
282 // Ideally, we want to detect errors in opening and report them, but we 283 // Ideally, we want to detect errors in opening and report them, but we
283 // don't generally have the proper interface for that to the external 284 // don't generally have the proper interface for that to the external
284 // program that opens the file. So instead we spawn a check to update 285 // program that opens the file. So instead we spawn a check to update
285 // the UI if the file has been deleted in parallel with the open. 286 // the UI if the file has been deleted in parallel with the open.
286 download_manager_->CheckForFileRemoval(this); 287 download_manager_->CheckForFileRemoval(this);
288 download_stats::RecordOpen(end_time(), !opened());
287 opened_ = true; 289 opened_ = true;
288 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadOpened(this)); 290 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadOpened(this));
291 download_manager_->MarkDownloadOpened(this);
289 292
290 // For testing: If download opening is disabled on this item, 293 // For testing: If download opening is disabled on this item,
291 // make the rest of the routine a no-op. 294 // make the rest of the routine a no-op.
292 if (!open_enabled_) 295 if (!open_enabled_)
293 return; 296 return;
294 297
295 if (download_manager_->delegate()->ShouldOpenDownload(this)) 298 if (download_manager_->delegate()->ShouldOpenDownload(this))
296 content::GetContentClient()->browser()->OpenItem(full_path()); 299 content::GetContentClient()->browser()->OpenItem(full_path());
297 } 300 }
298 301
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 StopProgressTimer(); 381 StopProgressTimer();
379 if (update_history) 382 if (update_history)
380 download_manager_->DownloadCancelledInternal(this); 383 download_manager_->DownloadCancelledInternal(this);
381 } 384 }
382 385
383 void DownloadItem::MarkAsComplete() { 386 void DownloadItem::MarkAsComplete() {
384 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 387 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
385 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 388 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
386 389
387 DCHECK(all_data_saved_); 390 DCHECK(all_data_saved_);
391 end_time_ = base::Time::Now();
388 TransitionTo(COMPLETE); 392 TransitionTo(COMPLETE);
389 } 393 }
390 394
391 void DownloadItem::CompleteDelayedDownload() { 395 void DownloadItem::CompleteDelayedDownload() {
392 auto_opened_ = true; 396 auto_opened_ = true;
393 Completed(); 397 Completed();
394 } 398 }
395 399
396 void DownloadItem::OnAllDataSaved(int64 size) { 400 void DownloadItem::OnAllDataSaved(int64 size) {
397 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 401 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
(...skipping 10 matching lines...) Expand all
408 UpdateObservers(); 412 UpdateObservers();
409 } 413 }
410 414
411 void DownloadItem::Completed() { 415 void DownloadItem::Completed() {
412 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 416 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
413 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 417 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
414 418
415 VLOG(20) << __FUNCTION__ << "() " << DebugString(false); 419 VLOG(20) << __FUNCTION__ << "() " << DebugString(false);
416 420
417 DCHECK(all_data_saved_); 421 DCHECK(all_data_saved_);
422 end_time_ = base::Time::Now();
418 TransitionTo(COMPLETE); 423 TransitionTo(COMPLETE);
419 download_manager_->DownloadCompleted(id()); 424 download_manager_->DownloadCompleted(id());
420 download_stats::RecordDownloadCompleted(start_tick_, received_bytes_); 425 download_stats::RecordDownloadCompleted(start_tick_, received_bytes_);
421 426
422 if (auto_opened_) { 427 if (auto_opened_) {
423 // If it was already handled by the delegate, do nothing. 428 // If it was already handled by the delegate, do nothing.
424 } else if (open_when_complete() || 429 } else if (open_when_complete() ||
425 ShouldOpenFileBasedOnExtension() || 430 ShouldOpenFileBasedOnExtension() ||
426 is_temporary()) { 431 is_temporary()) {
427 // If the download is temporary, like in drag-and-drop, do not open it but 432 // If the download is temporary, like in drag-and-drop, do not open it but
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 681
677 state_info_.is_dangerous_url = true; 682 state_info_.is_dangerous_url = true;
678 UpdateSafetyState(); 683 UpdateSafetyState();
679 } 684 }
680 685
681 DownloadPersistentStoreInfo DownloadItem::GetPersistentStoreInfo() const { 686 DownloadPersistentStoreInfo DownloadItem::GetPersistentStoreInfo() const {
682 return DownloadPersistentStoreInfo(full_path(), 687 return DownloadPersistentStoreInfo(full_path(),
683 GetURL(), 688 GetURL(),
684 referrer_url(), 689 referrer_url(),
685 start_time(), 690 start_time(),
691 end_time(),
686 received_bytes(), 692 received_bytes(),
687 total_bytes(), 693 total_bytes(),
688 state(), 694 state(),
689 db_handle()); 695 db_handle(),
696 opened());
690 } 697 }
691 698
692 FilePath DownloadItem::GetTargetFilePath() const { 699 FilePath DownloadItem::GetTargetFilePath() const {
693 return full_path_.DirName().Append(state_info_.target_name); 700 return full_path_.DirName().Append(state_info_.target_name);
694 } 701 }
695 702
696 FilePath DownloadItem::GetFileNameToReportUser() const { 703 FilePath DownloadItem::GetFileNameToReportUser() const {
697 if (state_info_.path_uniquifier > 0) { 704 if (state_info_.path_uniquifier > 0) {
698 FilePath name(state_info_.target_name); 705 FilePath name(state_info_.target_name);
699 DownloadFile::AppendNumberToPath(&name, state_info_.path_uniquifier); 706 DownloadFile::AppendNumberToPath(&name, state_info_.path_uniquifier);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 state_info_.target_name.value().c_str(), 806 state_info_.target_name.value().c_str(),
800 full_path().value().c_str()); 807 full_path().value().c_str());
801 } else { 808 } else {
802 description += base::StringPrintf(" url = \"%s\"", url_list.c_str()); 809 description += base::StringPrintf(" url = \"%s\"", url_list.c_str());
803 } 810 }
804 811
805 description += " }"; 812 description += " }";
806 813
807 return description; 814 return description;
808 } 815 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698