diff options
Diffstat (limited to 'chrome/browser/printing/print_view_manager.cc')
-rw-r--r-- | chrome/browser/printing/print_view_manager.cc | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/chrome/browser/printing/print_view_manager.cc b/chrome/browser/printing/print_view_manager.cc index 4e017e8..bdc9da3 100644 --- a/chrome/browser/printing/print_view_manager.cc +++ b/chrome/browser/printing/print_view_manager.cc @@ -27,6 +27,7 @@ PrintViewManager::PrintViewManager(WebContents& owner) waiting_to_print_(false), inside_inner_message_loop_(false), waiting_to_show_print_dialog_(false) { + memset(&print_params_, 0, sizeof(print_params_)); } PrintViewManager::~PrintViewManager() { @@ -239,6 +240,25 @@ void PrintViewManager::OnNotifyPrintJobEvent( void PrintViewManager::OnNotifyPrintJobInitEvent( const JobEventDetails& event_details) { + ViewMsg_Print_Params old_print_params(print_params_); + + // Backup the print settings relevant to the renderer. + DCHECK_EQ(print_job_->document(), event_details.document()); + event_details.document()->settings().RenderParams(&print_params_); + print_params_.document_cookie = event_details.document()->cookie(); + DCHECK_GT(print_params_.document_cookie, 0); + + // If settings changed + DCHECK(owner_.render_view_host()); + // Equals() doesn't compare the cookie value. + if (owner_.render_view_host() && + owner_.render_view_host()->IsRenderViewLive() && + (!old_print_params.Equals(print_params_) || + !event_details.document()->page_count())) { + // TODO(maruel): Will never happen, this code is about to be deleted. + NOTREACHED(); + } + // Continue even if owner_.render_view_host() is dead because we may already // have buffered all the necessary pages. switch (event_details.type()) { @@ -440,6 +460,7 @@ void PrintViewManager::ReleasePrintJob() { print_job_->DisconnectSource(); // Don't close the worker thread. print_job_ = NULL; + memset(&print_params_, 0, sizeof(print_params_)); } void PrintViewManager::PrintNowInternal() { |