diff options
author | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 20:02:51 +0000 |
---|---|---|
committer | thestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 20:02:51 +0000 |
commit | c767e563da117ea96366b9ee7b6ef969c38e1aa8 (patch) | |
tree | 09fd752d3f55cb67932b4749ae2828cf225d6e4a /chrome | |
parent | ca9e4caa5b55b443eba0a6a100bfbb2cb1b85479 (diff) | |
download | chromium_src-c767e563da117ea96366b9ee7b6ef969c38e1aa8.zip chromium_src-c767e563da117ea96366b9ee7b6ef969c38e1aa8.tar.gz chromium_src-c767e563da117ea96366b9ee7b6ef969c38e1aa8.tar.bz2 |
Print Preview: Always stop the preview job worker and handle the case where the preview tab goes away.
BUG=none
TEST=Open a large document, print preview it, and close the preview tab before the PDF renders.
Review URL: http://codereview.chromium.org/6576057
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76954 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/printing/print_preview_message_handler.cc | 47 |
1 files changed, 23 insertions, 24 deletions
diff --git a/chrome/browser/printing/print_preview_message_handler.cc b/chrome/browser/printing/print_preview_message_handler.cc index a338142..217adf8 100644 --- a/chrome/browser/printing/print_preview_message_handler.cc +++ b/chrome/browser/printing/print_preview_message_handler.cc @@ -39,31 +39,8 @@ TabContents* PrintPreviewMessageHandler::GetPrintPreviewTab() { void PrintPreviewMessageHandler::OnPagesReadyForPreview( const ViewHostMsg_DidPreviewDocument_Params& params) { -#if defined(OS_POSIX) - base::SharedMemory* shared_buf = - new base::SharedMemory(params.metafile_data_handle, true); - if (!shared_buf->Map(params.data_size)) { - NOTREACHED(); - return; - } -#endif - - // Get the print preview tab. - TabContents* print_preview_tab = GetPrintPreviewTab(); - DCHECK(print_preview_tab); - -#if defined(OS_POSIX) - PrintPreviewUI* print_preview_ui = - static_cast<PrintPreviewUI*>(print_preview_tab->web_ui()); - PrintPreviewUIHTMLSource* html_source = print_preview_ui->html_source(); - CHECK(html_source); - html_source->SetPrintPreviewData( - std::make_pair(shared_buf, params.data_size)); - print_preview_ui->PreviewDataIsAvailable(params.expected_pages_count); -#endif - + // Always need to stop the worker and send ViewMsg_PrintingDone. PrintJobManager* print_job_manager = g_browser_process->print_job_manager(); - CHECK(print_job_manager); scoped_refptr<printing::PrinterQuery> printer_query; print_job_manager->PopPrinterQuery(params.document_cookie, &printer_query); if (printer_query.get()) { @@ -77,6 +54,28 @@ void PrintPreviewMessageHandler::OnPagesReadyForPreview( rvh->Send(new ViewMsg_PrintingDone(rvh->routing_id(), params.document_cookie, true)); + + // Get the print preview tab. + TabContents* print_preview_tab = GetPrintPreviewTab(); + // User might have closed it already. + if (!print_preview_tab) + return; + +#if defined(OS_POSIX) + base::SharedMemory* shared_buf = + new base::SharedMemory(params.metafile_data_handle, true); + if (!shared_buf->Map(params.data_size)) { + NOTREACHED(); + return; + } + + PrintPreviewUI* print_preview_ui = + static_cast<PrintPreviewUI*>(print_preview_tab->web_ui()); + PrintPreviewUIHTMLSource* html_source = print_preview_ui->html_source(); + html_source->SetPrintPreviewData( + std::make_pair(shared_buf, params.data_size)); + print_preview_ui->PreviewDataIsAvailable(params.expected_pages_count); +#endif // defined(OS_POSIX) } bool PrintPreviewMessageHandler::OnMessageReceived( |