summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-04 20:02:51 +0000
committerthestig@chromium.org <thestig@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-04 20:02:51 +0000
commitc767e563da117ea96366b9ee7b6ef969c38e1aa8 (patch)
tree09fd752d3f55cb67932b4749ae2828cf225d6e4a /chrome
parentca9e4caa5b55b443eba0a6a100bfbb2cb1b85479 (diff)
downloadchromium_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.cc47
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(