Index: chrome/browser/ui/webui/print_preview_handler.cc |
diff --git a/chrome/browser/ui/webui/print_preview_handler.cc b/chrome/browser/ui/webui/print_preview_handler.cc |
index 1e496515093586732ba2f4bed6d0f59db01b5f58..d3cf30e505b257c48dbcb432e64e6d0b6904e9b7 100644 |
--- a/chrome/browser/ui/webui/print_preview_handler.cc |
+++ b/chrome/browser/ui/webui/print_preview_handler.cc |
@@ -8,6 +8,7 @@ |
#include "base/i18n/file_util_icu.h" |
#include "base/json/json_reader.h" |
+#include "base/metrics/histogram.h" |
#include "base/path_service.h" |
#include "base/threading/thread.h" |
#include "base/threading/thread_restrictions.h" |
@@ -53,6 +54,29 @@ const char kColorDevice[] = "ColorDevice"; |
const char kPskColor[] = "psk:Color"; |
#endif |
+// Histogram buckets |
+enum UserActionBuckets { |
+ PRINT_TO_PRINTER, |
+ PRINT_TO_PDF, |
+ CANCEL, |
+ FALLBACK_TO_ADVANCED_SETTINGS_DIALOG, |
+ USERACTION_BUCKET_BOUNDARY |
+}; |
+ |
+ |
+// Print preview user action histogram names. |
+const char kUserAction[] = "PrintPreview.UserAction"; |
+const char kManagePrinters[] = "PrintPreview.ManagePrinters"; |
+const char kNumberOfPrinters[] = "PrintPreview.NumberOfPrinters"; |
+const char kPreviewFailedInitiatorTabDoesNotExist[] = |
+ "PrintPreview.Failed.InitiatorTabDoesNotExist"; |
+ |
+const char kRegeneratePreviewRequestsRcvdBeforeCancel[] = |
+ "PrintPreview.RegeneratePreviewRequest.BeforeCancel"; |
+ |
+const char kRegeneratePreviewRequestsRcvdBeforePrint[] = |
+ "PrintPreview.RegeneratePreviewRequest.BeforePrint"; |
+ |
// Get the print job settings dictionary from |args|. The caller takes |
// ownership of the returned DictionaryValue. Returns NULL on failure. |
DictionaryValue* GetSettingsDictionary(const ListValue* args) { |
@@ -87,9 +111,11 @@ class PrintSystemTaskProxy |
BrowserThread::DeleteOnUIThread> { |
public: |
PrintSystemTaskProxy(const base::WeakPtr<PrintPreviewHandler>& handler, |
- printing::PrintBackend* print_backend) |
+ printing::PrintBackend* print_backend, |
+ bool has_logged_printers_count) |
: handler_(handler), |
- print_backend_(print_backend) { |
+ print_backend_(print_backend), |
+ has_logged_printers_count_(has_logged_printers_count) { |
} |
void EnumeratePrinters() { |
@@ -98,6 +124,12 @@ class PrintSystemTaskProxy |
printing::PrinterList printer_list; |
print_backend_->EnumeratePrinters(&printer_list); |
+ |
+ if (!has_logged_printers_count_) { |
+ // Record the total number of printers. |
+ UMA_HISTOGRAM_COUNTS(kNumberOfPrinters, printer_list.size()); |
+ } |
+ |
int i = 0; |
for (printing::PrinterList::iterator index = printer_list.begin(); |
index != printer_list.end(); ++index, ++i) { |
@@ -201,6 +233,8 @@ class PrintSystemTaskProxy |
scoped_refptr<printing::PrintBackend> print_backend_; |
+ bool has_logged_printers_count_; |
+ |
DISALLOW_COPY_AND_ASSIGN(PrintSystemTaskProxy); |
}; |
@@ -236,7 +270,11 @@ class PrintToPdfTask : public Task { |
FilePath* PrintPreviewHandler::last_saved_path_ = NULL; |
PrintPreviewHandler::PrintPreviewHandler() |
- : print_backend_(printing::PrintBackend::CreateInstance(NULL)) { |
+ : print_backend_(printing::PrintBackend::CreateInstance(NULL)), |
+ regenerate_preview_request_count_(0), |
+ manage_printers_dialog_request_count_(0), |
+ print_preview_failed_count_(0), |
+ has_logged_printers_count_(false) { |
} |
PrintPreviewHandler::~PrintPreviewHandler() { |
@@ -267,7 +305,11 @@ TabContents* PrintPreviewHandler::preview_tab() { |
void PrintPreviewHandler::HandleGetPrinters(const ListValue*) { |
scoped_refptr<PrintSystemTaskProxy> task = |
- new PrintSystemTaskProxy(AsWeakPtr(), print_backend_.get()); |
+ new PrintSystemTaskProxy(AsWeakPtr(), |
+ print_backend_.get(), |
+ has_logged_printers_count_); |
+ has_logged_printers_count_ = true; |
+ |
BrowserThread::PostTask( |
BrowserThread::FILE, FROM_HERE, |
NewRunnableMethod(task.get(), |
@@ -275,8 +317,12 @@ void PrintPreviewHandler::HandleGetPrinters(const ListValue*) { |
} |
void PrintPreviewHandler::HandleGetPreview(const ListValue* args) { |
+ // Increment request count. |
+ ++regenerate_preview_request_count_; |
+ |
TabContents* initiator_tab = GetInitiatorTab(); |
if (!initiator_tab) { |
+ ++print_preview_failed_count_; |
web_ui_->CallJavascriptFunction("printPreviewFailed"); |
return; |
} |
@@ -289,6 +335,13 @@ void PrintPreviewHandler::HandleGetPreview(const ListValue* args) { |
} |
void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
+ ReportStats(); |
+ |
+ // Record the number of times the user requests to regenerate preview data |
+ // before printing. |
+ UMA_HISTOGRAM_COUNTS(kRegeneratePreviewRequestsRcvdBeforePrint, |
+ regenerate_preview_request_count_); |
+ |
TabContents* initiator_tab = GetInitiatorTab(); |
if (initiator_tab) { |
RenderViewHost* rvh = initiator_tab->render_view_host(); |
@@ -306,6 +359,10 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
TabContentsWrapper::GetCurrentWrapperForContents(preview_tab()); |
if (print_to_pdf) { |
+ UMA_HISTOGRAM_ENUMERATION(kUserAction, |
+ PRINT_TO_PDF, |
+ USERACTION_BUCKET_BOUNDARY); |
+ |
// Pre-populating select file dialog with print job title. |
string16 print_job_title_utf16 = |
preview_tab_wrapper->print_view_manager()->RenderSourceName(); |
@@ -323,6 +380,9 @@ void PrintPreviewHandler::HandlePrint(const ListValue* args) { |
SelectFile(default_filename); |
} else { |
+ UMA_HISTOGRAM_ENUMERATION(kUserAction, |
+ PRINT_TO_PRINTER, |
+ USERACTION_BUCKET_BOUNDARY); |
g_browser_process->background_printing_manager()->OwnTabContents( |
preview_tab_wrapper); |
@@ -342,7 +402,9 @@ void PrintPreviewHandler::HandleGetPrinterCapabilities( |
return; |
scoped_refptr<PrintSystemTaskProxy> task = |
- new PrintSystemTaskProxy(AsWeakPtr(), print_backend_.get()); |
+ new PrintSystemTaskProxy(AsWeakPtr(), |
+ print_backend_.get(), |
+ has_logged_printers_count_); |
BrowserThread::PostTask( |
BrowserThread::FILE, FROM_HERE, |
@@ -352,6 +414,11 @@ void PrintPreviewHandler::HandleGetPrinterCapabilities( |
} |
void PrintPreviewHandler::HandleShowSystemDialog(const ListValue* args) { |
+ ReportStats(); |
+ UMA_HISTOGRAM_ENUMERATION(kUserAction, |
+ FALLBACK_TO_ADVANCED_SETTINGS_DIALOG, |
+ USERACTION_BUCKET_BOUNDARY); |
+ |
TabContents* initiator_tab = GetInitiatorTab(); |
if (!initiator_tab) |
return; |
@@ -365,13 +432,34 @@ void PrintPreviewHandler::HandleShowSystemDialog(const ListValue* args) { |
} |
void PrintPreviewHandler::HandleManagePrinters(const ListValue* args) { |
+ ++manage_printers_dialog_request_count_; |
printing::PrinterManagerDialog::ShowPrinterManagerDialog(); |
} |
void PrintPreviewHandler::HandleClosePreviewTab(const ListValue* args) { |
+ ReportStats(); |
+ UMA_HISTOGRAM_ENUMERATION(kUserAction, |
+ CANCEL, |
+ USERACTION_BUCKET_BOUNDARY); |
+ |
+ // Record the number of times the user requests to regenerate preview data |
+ // before cancelling. |
+ UMA_HISTOGRAM_COUNTS(kRegeneratePreviewRequestsRcvdBeforeCancel, |
+ regenerate_preview_request_count_); |
+ |
ActivateInitiatorTabAndClosePreviewTab(); |
} |
+void PrintPreviewHandler::ReportStats() { |
+ if (print_preview_failed_count_ > 0) { |
+ UMA_HISTOGRAM_COUNTS(kPreviewFailedInitiatorTabDoesNotExist, |
+ print_preview_failed_count_); |
+ } |
+ |
+ UMA_HISTOGRAM_COUNTS(kManagePrinters, |
+ manage_printers_dialog_request_count_); |
+} |
+ |
void PrintPreviewHandler::ActivateInitiatorTabAndClosePreviewTab() { |
TabContents* initiator_tab = GetInitiatorTab(); |
if (initiator_tab) |