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

Unified Diff: chrome/renderer/print_web_view_helper.cc

Issue 7747033: Merge 97702, 97820, 97976 (Closed) Base URL: svn://chrome-svn/chrome/branches/835/src/
Patch Set: Created 9 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/print_web_view_helper.h ('k') | chrome/renderer/print_web_view_helper_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/print_web_view_helper.cc
===================================================================
--- chrome/renderer/print_web_view_helper.cc (revision 98330)
+++ chrome/renderer/print_web_view_helper.cc (working copy)
@@ -9,7 +9,6 @@
#include "base/command_line.h"
#include "base/logging.h"
#include "base/metrics/histogram.h"
-#include "base/process_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/print_messages.h"
@@ -33,6 +32,7 @@
#include "ui/base/l10n/l10n_util.h"
#if defined(OS_POSIX)
+#include "base/process_util.h"
#include "content/common/view_messages.h"
#endif
@@ -218,8 +218,6 @@
IPC_MESSAGE_HANDLER(PrintMsg_PrintingDone, OnPrintingDone)
IPC_MESSAGE_HANDLER(PrintMsg_ResetScriptedPrintCount,
ResetScriptedPrintCount)
- IPC_MESSAGE_HANDLER(PrintMsg_ContinuePreview, OnContinuePreview)
- IPC_MESSAGE_HANDLER(PrintMsg_AbortPreview, OnAbortPreview)
IPC_MESSAGE_HANDLER(PrintMsg_PreviewPrintingRequestCancelled,
DisplayPrintJobError)
IPC_MESSAGE_UNHANDLED(handled = false)
@@ -256,7 +254,7 @@
return;
}
- if (!UpdatePrintSettings(job_settings)) {
+ if (!UpdatePrintSettings(job_settings, false)) {
DidFinishPrinting(FAIL_PRINT);
return;
}
@@ -314,7 +312,7 @@
return;
}
- if (!UpdatePrintSettings(settings)) {
+ if (!UpdatePrintSettings(settings, true)) {
DidFinishPrinting(FAIL_PREVIEW);
return;
}
@@ -342,7 +340,9 @@
// PDF printer device supports alpha blending.
print_pages_params_->params.supports_alpha_blend = true;
- if (!CreatePreviewDocument())
+ if (CreatePreviewDocument())
+ DidFinishPrinting(OK);
+ else
DidFinishPrinting(FAIL_PREVIEW);
}
@@ -357,44 +357,24 @@
params.document_cookie = print_pages_params_->params.document_cookie;
params.preview_request_id = print_pages_params_->params.preview_request_id;
Send(new PrintHostMsg_DidGetPreviewPageCount(routing_id(), params));
- PreviewPageRendered(printing::INVALID_PAGE_INDEX, NULL);
- return true;
-}
+ if (CheckForCancel())
+ return false;
-void PrintWebViewHelper::OnContinuePreview(int requested_preview_page_index) {
- // Spurious message. We already finished/cancelled/aborted the print preview.
- if (!print_preview_context_.IsBusy())
- return;
int page_number;
-#if defined(USE_SKIA)
- if (requested_preview_page_index >= printing::FIRST_PAGE_INDEX) {
- page_number = requested_preview_page_index;
- } else
-#endif
- {
- page_number = print_preview_context_.GetNextPageNumber();
- }
+ while ((page_number = print_preview_context_.GetNextPageNumber()) >= 0) {
+ if (!RenderPreviewPage(page_number))
+ return false;
+ if (CheckForCancel())
+ return false;
+ };
- if (page_number >= printing::FIRST_PAGE_INDEX) {
- // Continue generating the print preview.
- RenderPreviewPage(page_number);
- return;
- }
-
// Finished generating preview. Finalize the document.
- if (FinalizePreviewDocument()) {
- print_preview_context_.Finished();
- DidFinishPrinting(OK);
- } else {
- DidFinishPrinting(FAIL_PREVIEW);
- }
+ if (!FinalizePreviewDocument())
+ return false;
+ print_preview_context_.Finished();
+ return true;
}
-void PrintWebViewHelper::OnAbortPreview() {
- DidFinishPrinting(ABORT_PREVIEW);
- return;
-}
-
bool PrintWebViewHelper::FinalizePreviewDocument() {
print_preview_context_.FinalizePreviewDocument();
@@ -507,12 +487,11 @@
DCHECK(is_preview_);
store_print_pages_params = false;
int cookie = print_pages_params_->params.document_cookie;
- Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie));
+ if (notify_browser_of_print_failure_)
+ Send(new PrintHostMsg_PrintPreviewFailed(routing_id(), cookie));
+ else
+ Send(new PrintHostMsg_PrintPreviewCancelled(routing_id(), cookie));
print_preview_context_.Failed();
- } else if (result == ABORT_PREVIEW) {
- DCHECK(is_preview_);
- store_print_pages_params = false;
- print_preview_context_.Abort();
}
if (print_web_view_) {
@@ -750,33 +729,26 @@
return true;
}
-bool PrintWebViewHelper::UpdatePrintSettingsRequestId(
- const DictionaryValue& job_settings,
- PrintMsg_Print_Params* params) {
- if (!job_settings.GetInteger(printing::kPreviewRequestID,
- &(params->preview_request_id))) {
- NOTREACHED();
- return false;
- }
- return true;
-}
-
bool PrintWebViewHelper::UpdatePrintSettings(
- const DictionaryValue& job_settings) {
+ const DictionaryValue& job_settings, bool is_preview) {
PrintMsg_PrintPages_Params settings;
Send(new PrintHostMsg_UpdatePrintSettings(routing_id(),
print_pages_params_->params.document_cookie, job_settings, &settings));
-
if (settings.params.dpi < kMinDpi || !settings.params.document_cookie)
return false;
- if (!UpdatePrintSettingsRequestId(job_settings, &(settings.params)))
- return false;
-
- if (!job_settings.GetBoolean(printing::kIsFirstRequest,
- &(settings.params.is_first_request))) {
- NOTREACHED();
+ if (is_preview) {
+ // Validate expected print preview settings.
+ if (!job_settings.GetString(printing::kPreviewUIAddr,
+ &(settings.params.preview_ui_addr)) ||
+ !job_settings.GetInteger(printing::kPreviewRequestID,
+ &(settings.params.preview_request_id)) ||
+ !job_settings.GetBoolean(printing::kIsFirstRequest,
+ &(settings.params.is_first_request))) {
+ NOTREACHED();
+ return false;
+ }
}
print_pages_params_.reset(new PrintMsg_PrintPages_Params(settings));
@@ -875,9 +847,6 @@
}
}
- if (!too_frequent && print_preview_context_.IsBusy())
- too_frequent = true;
-
if (!too_frequent)
return false;
@@ -913,40 +882,57 @@
Send(new PrintHostMsg_RequestPrintPreview(routing_id()));
}
-void PrintWebViewHelper::PreviewPageRendered(int page_number,
+bool PrintWebViewHelper::CheckForCancel() {
+ bool cancel = false;
+ Send(new PrintHostMsg_CheckForCancel(
+ routing_id(),
+ print_pages_params_->params.preview_ui_addr,
+ print_pages_params_->params.preview_request_id,
+ &cancel));
+ if (cancel)
+ notify_browser_of_print_failure_ = false;
+ return cancel;
+}
+
+bool PrintWebViewHelper::PreviewPageRendered(int page_number,
printing::Metafile* metafile) {
- if ((page_number == printing::INVALID_PAGE_INDEX && metafile) ||
- (page_number >= printing::FIRST_PAGE_INDEX && !metafile &&
- print_preview_context_.IsModifiable())) {
+ DCHECK_GE(page_number, printing::FIRST_PAGE_INDEX);
+
+ // For non-modifiable files, |metafile| should be NULL, so do not bother
+ // sending a message.
+ if (!print_preview_context_.IsModifiable()) {
+ DCHECK(!metafile);
+ return true;
+ }
+
+ if (!metafile) {
NOTREACHED();
- DidFinishPrinting(FAIL_PREVIEW);
- return;
+ return false;
}
- uint32 buf_size = 0;
PrintHostMsg_DidPreviewPage_Params preview_page_params;
// Get the size of the resulting metafile.
- if (metafile) {
- buf_size = metafile->GetDataSize();
- DCHECK_GT(buf_size, 0u);
- if (!CopyMetafileDataToSharedMem(
- metafile, &(preview_page_params.metafile_data_handle))) {
- DidFinishPrinting(FAIL_PREVIEW);
- return;
- }
+ uint32 buf_size = metafile->GetDataSize();
+ DCHECK_GT(buf_size, 0u);
+ if (!CopyMetafileDataToSharedMem(
+ metafile, &(preview_page_params.metafile_data_handle))) {
+ return false;
}
+
preview_page_params.data_size = buf_size;
preview_page_params.page_number = page_number;
preview_page_params.preview_request_id =
print_pages_params_->params.preview_request_id;
+
Send(new PrintHostMsg_DidPreviewPage(routing_id(), preview_page_params));
+ return true;
}
PrintWebViewHelper::PrintPreviewContext::PrintPreviewContext()
: frame_(NULL),
total_page_count_(0),
actual_page_count_(0),
- current_page_number_(0),
+ current_page_index_(0),
state_(UNINITIALIZED) {
}
@@ -956,8 +942,6 @@
void PrintWebViewHelper::PrintPreviewContext::InitWithFrame(
WebKit::WebFrame* web_frame) {
DCHECK(web_frame);
- if (IsReadyToRender())
- return;
state_ = INITIALIZED;
frame_ = web_frame;
node_.reset();
@@ -966,8 +950,6 @@
void PrintWebViewHelper::PrintPreviewContext::InitWithNode(
const WebKit::WebNode& web_node) {
DCHECK(!web_node.isNull());
- if (IsReadyToRender())
- return;
state_ = INITIALIZED;
frame_ = web_node.document().frame();
node_.reset(new WebNode(web_node));
@@ -1000,23 +982,20 @@
if (total_page_count_ == 0)
return false;
- current_page_number_ = 0;
+ current_page_index_ = 0;
if (pages.empty()) {
actual_page_count_ = total_page_count_;
- rendered_pages_ = std::vector<PreviewPageInfo>(total_page_count_,
- std::make_pair(false, -1));
+ for (int i = 0; i < actual_page_count_; ++i)
+ pages_to_render_.push_back(i);
} else {
actual_page_count_ = pages.size();
- rendered_pages_ = std::vector<PreviewPageInfo>(total_page_count_,
- std::make_pair(true, -1));
for (int i = 0; i < actual_page_count_; ++i) {
int page_number = pages[i];
if (page_number < printing::FIRST_PAGE_INDEX ||
page_number >= total_page_count_) {
return false;
}
- rendered_pages_[page_number].first = false;
- rendered_pages_[page_number].second = i;
+ pages_to_render_.push_back(page_number);
}
}
@@ -1063,39 +1042,22 @@
}
void PrintWebViewHelper::PrintPreviewContext::Failed() {
- DCHECK(IsBusy());
+ DCHECK(state_ == INITIALIZED || state_ == RENDERING);
state_ = INITIALIZED;
ClearContext();
}
-void PrintWebViewHelper::PrintPreviewContext::Abort() {
- state_ = UNINITIALIZED;
- ClearContext();
- frame_ = NULL;
- node_.reset();
-}
-
int PrintWebViewHelper::PrintPreviewContext::GetNextPageNumber() {
DCHECK_EQ(RENDERING, state_);
- for (int i = 0; i < total_page_count_; i++) {
- if (!rendered_pages_[current_page_number_].first)
- break;
- current_page_number_ = (current_page_number_ + 1) % total_page_count_;
- }
- if (rendered_pages_[current_page_number_].first)
- return printing::INVALID_PAGE_INDEX;
- rendered_pages_[current_page_number_].first = true;
- return current_page_number_;
+ if (current_page_index_ >= actual_page_count_)
+ return -1;
+ return pages_to_render_[current_page_index_++];
}
bool PrintWebViewHelper::PrintPreviewContext::IsReadyToRender() const {
return state_ != UNINITIALIZED;
}
-bool PrintWebViewHelper::PrintPreviewContext::IsBusy() const {
- return state_ == INITIALIZED || state_ == RENDERING;
-}
-
bool PrintWebViewHelper::PrintPreviewContext::IsModifiable() const {
// TODO(vandebo) I think this should only return false if the content is a
// PDF, just because we are printing a particular node does not mean it's
@@ -1115,6 +1077,7 @@
}
int PrintWebViewHelper::PrintPreviewContext::total_page_count() const {
+ DCHECK(IsReadyToRender());
return total_page_count_;
}
@@ -1135,5 +1098,5 @@
void PrintWebViewHelper::PrintPreviewContext::ClearContext() {
prep_frame_view_.reset();
metafile_.reset();
- rendered_pages_.clear();
+ pages_to_render_.clear();
}
« no previous file with comments | « chrome/renderer/print_web_view_helper.h ('k') | chrome/renderer/print_web_view_helper_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698