diff options
author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-13 06:00:41 +0000 |
---|---|---|
committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-13 06:00:41 +0000 |
commit | c1fa0ff8e349d00e8e7b30bf1efeab398443cb43 (patch) | |
tree | 7a99c8601200623c25a8087b6df0dd38827d19c4 /chrome/renderer | |
parent | 779a24a448ed76d9be977376f956e3f761e1548a (diff) | |
download | chromium_src-c1fa0ff8e349d00e8e7b30bf1efeab398443cb43.zip chromium_src-c1fa0ff8e349d00e8e7b30bf1efeab398443cb43.tar.gz chromium_src-c1fa0ff8e349d00e8e7b30bf1efeab398443cb43.tar.bz2 |
Print Preview: Add UMA for renderer failures.
BUG=92586
TEST=none
Review URL: http://codereview.chromium.org/7841025
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100873 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/print_web_view_helper.cc | 29 | ||||
-rw-r--r-- | chrome/renderer/print_web_view_helper.h | 17 | ||||
-rw-r--r-- | chrome/renderer/print_web_view_helper_mac.mm | 2 |
3 files changed, 43 insertions, 5 deletions
diff --git a/chrome/renderer/print_web_view_helper.cc b/chrome/renderer/print_web_view_helper.cc index 7692ec2..27f716a1 100644 --- a/chrome/renderer/print_web_view_helper.cc +++ b/chrome/renderer/print_web_view_helper.cc @@ -704,7 +704,7 @@ bool PrintWebViewHelper::CreatePreviewDocument() { while (!print_preview_context_.IsFinalPageRendered()) { int page_number = print_preview_context_.GetNextPageNumber(); - DCHECK(page_number >= 0); + DCHECK_GE(page_number, 0); if (!RenderPreviewPage(page_number)) return false; @@ -755,6 +755,7 @@ bool PrintWebViewHelper::FinalizePrintReadyDocument() { if (!CopyMetafileDataToSharedMem(metafile, &(preview_params.metafile_data_handle))) { LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; + print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); return false; } is_print_ready_metafile_sent_ = true; @@ -856,7 +857,7 @@ void PrintWebViewHelper::DidFinishPrinting(PrintingResult result) { Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie)); else Send(new PrintHostMsg_PrintPreviewCancelled(routing_id(), cookie)); - print_preview_context_.Failed(); + print_preview_context_.Failed(notify_browser_of_print_failure_); } if (print_web_view_) { @@ -1110,8 +1111,10 @@ bool PrintWebViewHelper::UpdatePrintSettings( Send(new PrintHostMsg_UpdatePrintSettings(routing_id(), print_pages_params_->params.document_cookie, job_settings, &settings)); - if (settings.params.dpi < kMinDpi || !settings.params.document_cookie) + if (settings.params.dpi < kMinDpi || !settings.params.document_cookie) { + print_preview_context_.set_error(PREVIEW_ERROR_UPDATING_PRINT_SETTINGS); return false; + } if (is_preview) { // Validate expected print preview settings. @@ -1122,6 +1125,7 @@ bool PrintWebViewHelper::UpdatePrintSettings( !job_settings.GetBoolean(printing::kIsFirstRequest, &(settings.params.is_first_request))) { NOTREACHED(); + print_preview_context_.set_error(PREVIEW_ERROR_BAD_SETTING); return false; } @@ -1311,6 +1315,8 @@ bool PrintWebViewHelper::PreviewPageRendered(int page_number, if (!metafile) { NOTREACHED(); + print_preview_context_.set_error( + PREVIEW_ERROR_PAGE_RENDERED_WITHOUT_METAFILE); return false; } @@ -1321,6 +1327,7 @@ bool PrintWebViewHelper::PreviewPageRendered(int page_number, if (!CopyMetafileDataToSharedMem( metafile, &(preview_page_params.metafile_data_handle))) { LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; + print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); return false; } preview_page_params.data_size = buf_size; @@ -1338,6 +1345,7 @@ PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext() current_page_index_(0), generate_draft_pages_(true), print_ready_metafile_page_count_(0), + error_(PREVIEW_ERROR_NONE), state_(UNINITIALIZED) { } @@ -1375,6 +1383,7 @@ bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( metafile_.reset(new printing::PreviewMetafile); if (!metafile_->Init()) { + set_error(PREVIEW_ERROR_METAFILE_INIT_FAILED); LOG(ERROR) << "PreviewMetafile Init failed"; return false; } @@ -1388,6 +1397,7 @@ bool PrintWebViewHelper::PrintPreviewContext::CreatePreviewDocument( total_page_count_ = prep_frame_view_->GetExpectedPageCount(); if (total_page_count_ == 0) { LOG(ERROR) << "CreatePreviewDocument got 0 page count"; + set_error(PREVIEW_ERROR_ZERO_PAGES); return false; } @@ -1458,9 +1468,14 @@ void PrintWebViewHelper::PrintPreviewContext::Finished() { ClearContext(); } -void PrintWebViewHelper::PrintPreviewContext::Failed() { +void PrintWebViewHelper::PrintPreviewContext::Failed(bool report_error) { DCHECK(state_ == INITIALIZED || state_ == RENDERING); state_ = INITIALIZED; + if (report_error) { + DCHECK_NE(PREVIEW_ERROR_NONE, error_); + UMA_HISTOGRAM_ENUMERATION("PrintPreview.RendererError", error_, + PREVIEW_ERROR_LAST_ENUM); + } ClearContext(); } @@ -1499,6 +1514,11 @@ void PrintWebViewHelper::PrintPreviewContext::set_generate_draft_pages( generate_draft_pages_ = generate_draft_pages; } +void PrintWebViewHelper::PrintPreviewContext::set_error( + enum PrintPreviewErrorBuckets error) { + error_ = error; +} + WebKit::WebFrame* PrintWebViewHelper::PrintPreviewContext::frame() const { return frame_; } @@ -1535,4 +1555,5 @@ void PrintWebViewHelper::PrintPreviewContext::ClearContext() { prep_frame_view_.reset(); metafile_.reset(); pages_to_render_.clear(); + error_ = PREVIEW_ERROR_NONE; } diff --git a/chrome/renderer/print_web_view_helper.h b/chrome/renderer/print_web_view_helper.h index ad8ffe0..82d5e03 100644 --- a/chrome/renderer/print_web_view_helper.h +++ b/chrome/renderer/print_web_view_helper.h @@ -325,6 +325,18 @@ class PrintWebViewHelper : public RenderViewObserver, // footers if requested by the user. scoped_ptr<base::DictionaryValue> header_footer_info_; + enum PrintPreviewErrorBuckets { + PREVIEW_ERROR_NONE, // Always first. + PREVIEW_ERROR_BAD_SETTING, + PREVIEW_ERROR_METAFILE_COPY_FAILED, + PREVIEW_ERROR_METAFILE_INIT_FAILED, + PREVIEW_ERROR_ZERO_PAGES, + PREVIEW_ERROR_MAC_DRAFT_METAFILE_INIT_FAILED, + PREVIEW_ERROR_PAGE_RENDERED_WITHOUT_METAFILE, + PREVIEW_ERROR_UPDATING_PRINT_SETTINGS, + PREVIEW_ERROR_LAST_ENUM // Always last. + }; + // Keeps track of the state of print preview between messages. class PrintPreviewContext { public: @@ -357,7 +369,7 @@ class PrintWebViewHelper : public RenderViewObserver, void Finished(); // Cleanup after print preview fails. - void Failed(); + void Failed(bool report_error); // Helper functions int GetNextPageNumber(); @@ -368,6 +380,7 @@ class PrintWebViewHelper : public RenderViewObserver, // Setters void set_generate_draft_pages(bool generate_draft_pages); + void set_error(enum PrintPreviewErrorBuckets error); // Getters WebKit::WebFrame* frame() const; @@ -415,6 +428,8 @@ class PrintWebViewHelper : public RenderViewObserver, base::TimeDelta document_render_time_; base::TimeTicks begin_time_; + enum PrintPreviewErrorBuckets error_; + State state_; }; diff --git a/chrome/renderer/print_web_view_helper_mac.mm b/chrome/renderer/print_web_view_helper_mac.mm index ccc2a47..0e8c3b2 100644 --- a/chrome/renderer/print_web_view_helper_mac.mm +++ b/chrome/renderer/print_web_view_helper_mac.mm @@ -86,6 +86,8 @@ bool PrintWebViewHelper::RenderPreviewPage(int page_number) { if (render_to_draft) { draft_metafile.reset(new printing::PreviewMetafile()); if (!draft_metafile->Init()) { + print_preview_context_.set_error( + PREVIEW_ERROR_MAC_DRAFT_METAFILE_INIT_FAILED); LOG(ERROR) << "Draft PreviewMetafile Init failed"; return false; } |