summaryrefslogtreecommitdiffstats
path: root/chrome/browser/download/download_file_picker.cc
diff options
context:
space:
mode:
authorcbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-14 19:51:42 +0000
committercbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-14 19:51:42 +0000
commit812acfce234193ddb58a52c719d9b97e6c58da29 (patch)
tree94af63495cc24c837c4bcc608fdf740ae94988d0 /chrome/browser/download/download_file_picker.cc
parent792d2072309597d56a51f81c0b5e297c77d5256f (diff)
downloadchromium_src-812acfce234193ddb58a52c719d9b97e6c58da29.zip
chromium_src-812acfce234193ddb58a52c719d9b97e6c58da29.tar.gz
chromium_src-812acfce234193ddb58a52c719d9b97e6c58da29.tar.bz2
Instrument how the download file chooser is used.
This lets us see how frequently users override the default filename,. BUG=114025 TEST=Look at about:histograms after doing a few actions, make sure Download.FilePickerResult is sane. Review URL: http://codereview.chromium.org/9389012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121916 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/download/download_file_picker.cc')
-rw-r--r--chrome/browser/download/download_file_picker.cc45
1 files changed, 44 insertions, 1 deletions
diff --git a/chrome/browser/download/download_file_picker.cc b/chrome/browser/download/download_file_picker.cc
index 4db364b..5fbe7ae 100644
--- a/chrome/browser/download/download_file_picker.cc
+++ b/chrome/browser/download/download_file_picker.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/download/download_file_picker.h"
+#include "base/metrics/histogram.h"
#include "chrome/browser/download/download_prefs.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/profiles/profile.h"
@@ -14,12 +15,51 @@
using content::DownloadManager;
using content::WebContents;
+namespace {
+
+enum FilePickerResult {
+ FILE_PICKER_SAME,
+ FILE_PICKER_DIFFERENT_DIR,
+ FILE_PICKER_DIFFERENT_NAME,
+ FILE_PICKER_CANCEL,
+ FILE_PICKER_MAX,
+};
+
+// Record how the File Chooser was used during a download. Only record this
+// for profiles that do not always prompt for save locations on downloads.
+void RecordFilePickerResult(DownloadManager* manager,
+ FilePickerResult result) {
+ if (!manager)
+ return;
+ const DownloadPrefs* prefs = DownloadPrefs::FromDownloadManager(manager);
+ if (!prefs)
+ return;
+ if (prefs->PromptForDownload())
+ return;
+ UMA_HISTOGRAM_ENUMERATION("Download.FilePickerResult",
+ result,
+ FILE_PICKER_MAX);
+}
+
+FilePickerResult ComparePaths(const FilePath& suggested_path,
+ const FilePath& actual_path) {
+ if (suggested_path == actual_path)
+ return FILE_PICKER_SAME;
+ if (suggested_path.DirName() != actual_path.DirName())
+ return FILE_PICKER_DIFFERENT_DIR;
+ return FILE_PICKER_DIFFERENT_NAME;
+}
+
+} // namespace
+
DownloadFilePicker::DownloadFilePicker(
DownloadManager* download_manager,
WebContents* web_contents,
const FilePath& suggested_path,
void* params)
- : download_manager_(download_manager) {
+ : download_manager_(download_manager),
+ suggested_path_(suggested_path) {
+ DCHECK(download_manager_);
select_file_dialog_ = SelectFileDialog::Create(this);
SelectFileDialog::FileTypeInfo file_type_info;
FilePath::StringType extension = suggested_path.Extension();
@@ -53,12 +93,15 @@ void DownloadFilePicker::ManagerGoingDown(DownloadManager* manager) {
void DownloadFilePicker::FileSelected(const FilePath& path,
int index,
void* params) {
+ FilePickerResult result = ComparePaths(suggested_path_, path);
+ RecordFilePickerResult(download_manager_, result);
if (download_manager_)
download_manager_->FileSelected(path, params);
delete this;
}
void DownloadFilePicker::FileSelectionCanceled(void* params) {
+ RecordFilePickerResult(download_manager_, FILE_PICKER_CANCEL);
if (download_manager_)
download_manager_->FileSelectionCanceled(params);
delete this;