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

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: merge 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
« no previous file with comments | « content/browser/download/download_item.h ('k') | content/browser/download/download_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 const DownloadPersistentStoreInfo& info) 123 const DownloadPersistentStoreInfo& info)
124 : download_id_(-1), 124 : download_id_(-1),
125 full_path_(info.path), 125 full_path_(info.path),
126 url_chain_(1, info.url), 126 url_chain_(1, info.url),
127 referrer_url_(info.referrer_url), 127 referrer_url_(info.referrer_url),
128 total_bytes_(info.total_bytes), 128 total_bytes_(info.total_bytes),
129 received_bytes_(info.received_bytes), 129 received_bytes_(info.received_bytes),
130 start_tick_(base::TimeTicks()), 130 start_tick_(base::TimeTicks()),
131 state_(static_cast<DownloadState>(info.state)), 131 state_(static_cast<DownloadState>(info.state)),
132 start_time_(info.start_time), 132 start_time_(info.start_time),
133 end_time_(info.end_time),
133 db_handle_(info.db_handle), 134 db_handle_(info.db_handle),
134 download_manager_(download_manager), 135 download_manager_(download_manager),
135 is_paused_(false), 136 is_paused_(false),
136 open_when_complete_(false), 137 open_when_complete_(false),
137 file_externally_removed_(false), 138 file_externally_removed_(false),
138 safety_state_(SAFE), 139 safety_state_(SAFE),
139 auto_opened_(false), 140 auto_opened_(false),
140 is_otr_(false), 141 is_otr_(false),
141 is_temporary_(false), 142 is_temporary_(false),
142 all_data_saved_(false), 143 all_data_saved_(false),
143 opened_(false), 144 opened_(info.opened),
144 open_enabled_(true), 145 open_enabled_(true),
145 delegate_delayed_complete_(false) { 146 delegate_delayed_complete_(false) {
146 if (IsInProgress()) 147 if (IsInProgress())
147 state_ = CANCELLED; 148 state_ = CANCELLED;
148 if (IsComplete()) 149 if (IsComplete())
149 all_data_saved_ = true; 150 all_data_saved_ = true;
150 Init(false /* not actively downloading */); 151 Init(false /* not actively downloading */);
151 } 152 }
152 153
153 // Constructing for a regular download: 154 // Constructing for a regular download:
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 } 279 }
279 280
280 if (!IsComplete() || file_externally_removed_) 281 if (!IsComplete() || file_externally_removed_)
281 return; 282 return;
282 283
283 // Ideally, we want to detect errors in opening and report them, but we 284 // Ideally, we want to detect errors in opening and report them, but we
284 // don't generally have the proper interface for that to the external 285 // don't generally have the proper interface for that to the external
285 // program that opens the file. So instead we spawn a check to update 286 // program that opens the file. So instead we spawn a check to update
286 // the UI if the file has been deleted in parallel with the open. 287 // the UI if the file has been deleted in parallel with the open.
287 download_manager_->CheckForFileRemoval(this); 288 download_manager_->CheckForFileRemoval(this);
289 download_stats::RecordOpen(end_time(), !opened());
288 opened_ = true; 290 opened_ = true;
289 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadOpened(this)); 291 FOR_EACH_OBSERVER(Observer, observers_, OnDownloadOpened(this));
292 download_manager_->MarkDownloadOpened(this);
290 293
291 // For testing: If download opening is disabled on this item, 294 // For testing: If download opening is disabled on this item,
292 // make the rest of the routine a no-op. 295 // make the rest of the routine a no-op.
293 if (!open_enabled_) 296 if (!open_enabled_)
294 return; 297 return;
295 298
296 if (download_manager_->delegate()->ShouldOpenDownload(this)) 299 if (download_manager_->delegate()->ShouldOpenDownload(this))
297 content::GetContentClient()->browser()->OpenItem(full_path()); 300 content::GetContentClient()->browser()->OpenItem(full_path());
298 } 301 }
299 302
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 StopProgressTimer(); 386 StopProgressTimer();
384 if (user_cancel) 387 if (user_cancel)
385 download_manager_->DownloadCancelledInternal(this); 388 download_manager_->DownloadCancelledInternal(this);
386 } 389 }
387 390
388 void DownloadItem::MarkAsComplete() { 391 void DownloadItem::MarkAsComplete() {
389 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 392 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
390 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 393 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
391 394
392 DCHECK(all_data_saved_); 395 DCHECK(all_data_saved_);
396 end_time_ = base::Time::Now();
393 TransitionTo(COMPLETE); 397 TransitionTo(COMPLETE);
394 } 398 }
395 399
396 void DownloadItem::CompleteDelayedDownload() { 400 void DownloadItem::CompleteDelayedDownload() {
397 auto_opened_ = true; 401 auto_opened_ = true;
398 Completed(); 402 Completed();
399 } 403 }
400 404
401 void DownloadItem::OnAllDataSaved(int64 size) { 405 void DownloadItem::OnAllDataSaved(int64 size) {
402 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 406 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
(...skipping 10 matching lines...) Expand all
413 UpdateObservers(); 417 UpdateObservers();
414 } 418 }
415 419
416 void DownloadItem::Completed() { 420 void DownloadItem::Completed() {
417 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved. 421 // TODO(rdsmith): Change to DCHECK after http://crbug.com/85408 resolved.
418 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 422 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
419 423
420 VLOG(20) << __FUNCTION__ << "() " << DebugString(false); 424 VLOG(20) << __FUNCTION__ << "() " << DebugString(false);
421 425
422 DCHECK(all_data_saved_); 426 DCHECK(all_data_saved_);
427 end_time_ = base::Time::Now();
423 TransitionTo(COMPLETE); 428 TransitionTo(COMPLETE);
424 download_manager_->DownloadCompleted(id()); 429 download_manager_->DownloadCompleted(id());
425 download_stats::RecordDownloadCompleted(start_tick_, received_bytes_); 430 download_stats::RecordDownloadCompleted(start_tick_, received_bytes_);
426 431
427 if (auto_opened_) { 432 if (auto_opened_) {
428 // If it was already handled by the delegate, do nothing. 433 // If it was already handled by the delegate, do nothing.
429 } else if (open_when_complete() || 434 } else if (open_when_complete() ||
430 ShouldOpenFileBasedOnExtension() || 435 ShouldOpenFileBasedOnExtension() ||
431 is_temporary()) { 436 is_temporary()) {
432 // If the download is temporary, like in drag-and-drop, do not open it but 437 // 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
681 686
682 state_info_.is_dangerous_url = true; 687 state_info_.is_dangerous_url = true;
683 UpdateSafetyState(); 688 UpdateSafetyState();
684 } 689 }
685 690
686 DownloadPersistentStoreInfo DownloadItem::GetPersistentStoreInfo() const { 691 DownloadPersistentStoreInfo DownloadItem::GetPersistentStoreInfo() const {
687 return DownloadPersistentStoreInfo(full_path(), 692 return DownloadPersistentStoreInfo(full_path(),
688 GetURL(), 693 GetURL(),
689 referrer_url(), 694 referrer_url(),
690 start_time(), 695 start_time(),
696 end_time(),
691 received_bytes(), 697 received_bytes(),
692 total_bytes(), 698 total_bytes(),
693 state(), 699 state(),
694 db_handle()); 700 db_handle(),
701 opened());
695 } 702 }
696 703
697 FilePath DownloadItem::GetTargetFilePath() const { 704 FilePath DownloadItem::GetTargetFilePath() const {
698 return full_path_.DirName().Append(state_info_.target_name); 705 return full_path_.DirName().Append(state_info_.target_name);
699 } 706 }
700 707
701 FilePath DownloadItem::GetFileNameToReportUser() const { 708 FilePath DownloadItem::GetFileNameToReportUser() const {
702 if (state_info_.path_uniquifier > 0) { 709 if (state_info_.path_uniquifier > 0) {
703 FilePath name(state_info_.target_name); 710 FilePath name(state_info_.target_name);
704 DownloadFile::AppendNumberToPath(&name, state_info_.path_uniquifier); 711 DownloadFile::AppendNumberToPath(&name, state_info_.path_uniquifier);
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 state_info_.target_name.value().c_str(), 811 state_info_.target_name.value().c_str(),
805 full_path().value().c_str()); 812 full_path().value().c_str());
806 } else { 813 } else {
807 description += base::StringPrintf(" url = \"%s\"", url_list.c_str()); 814 description += base::StringPrintf(" url = \"%s\"", url_list.c_str());
808 } 815 }
809 816
810 description += " }"; 817 description += " }";
811 818
812 return description; 819 return description;
813 } 820 }
OLDNEW
« no previous file with comments | « content/browser/download/download_item.h ('k') | content/browser/download/download_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698