summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-13 06:00:41 +0000
committerthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-09-13 06:00:41 +0000
commitc1fa0ff8e349d00e8e7b30bf1efeab398443cb43 (patch)
tree7a99c8601200623c25a8087b6df0dd38827d19c4 /chrome/renderer
parent779a24a448ed76d9be977376f956e3f761e1548a (diff)
downloadchromium_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.cc29
-rw-r--r--chrome/renderer/print_web_view_helper.h17
-rw-r--r--chrome/renderer/print_web_view_helper_mac.mm2
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;
}