diff options
Diffstat (limited to 'src/core/print_view_manager_base_qt.cpp')
-rw-r--r-- | src/core/print_view_manager_base_qt.cpp | 75 |
1 files changed, 36 insertions, 39 deletions
diff --git a/src/core/print_view_manager_base_qt.cpp b/src/core/print_view_manager_base_qt.cpp index cbd8ea03a..abae38160 100644 --- a/src/core/print_view_manager_base_qt.cpp +++ b/src/core/print_view_manager_base_qt.cpp @@ -105,24 +105,6 @@ void PrintViewManagerBaseQt::NavigationStopped() TerminatePrintJob(true); } - // Terminates or cancels the print job if one was pending. -void PrintViewManagerBaseQt::RenderProcessGone(base::TerminationStatus status) -{ - PrintManager::RenderProcessGone(status); - ReleasePrinterQuery(); - - if (!m_printJob.get()) - return; - - scoped_refptr<printing::PrintedDocument> document(m_printJob->document()); - if (document.get()) { - // If IsComplete() returns false, the document isn't completely rendered. - // Since our renderer is gone, there's nothing to do, cancel it. Otherwise, - // the print job may finish without problem. - TerminatePrintJob(!document->IsComplete()); - } -} - base::string16 PrintViewManagerBaseQt::RenderSourceName() { return toString16(QLatin1String("")); @@ -171,7 +153,7 @@ void PrintViewManagerBaseQt::OnDidPrintPage( } } - std::unique_ptr<printing::PdfMetafileSkia> metafile(new printing::PdfMetafileSkia(printing::PDF_SKIA_DOCUMENT_TYPE)); + std::unique_ptr<printing::PdfMetafileSkia> metafile(new printing::PdfMetafileSkia(printing::SkiaDocumentType::PDF)); if (metafile_must_be_valid) { if (!metafile->InitFromData(shared_buf->memory(), params.data_size)) { NOTREACHED() << "Invalid metafile header"; @@ -210,6 +192,28 @@ void PrintViewManagerBaseQt::OnShowInvalidPrinterSettingsError() void PrintViewManagerBaseQt::DidStartLoading() { + UpdatePrintingEnabled(); +} + +void PrintViewManagerBaseQt::RenderFrameDeleted(content::RenderFrameHost *render_frame_host) +{ + // Terminates or cancels the print job if one was pending. + if (render_frame_host != web_contents()->GetMainFrame()) + return; + + PrintManager::PrintingRenderFrameDeleted(); + ReleasePrinterQuery(); + + if (!m_printJob.get()) + return; + + scoped_refptr<printing::PrintedDocument> document(m_printJob->document()); + if (document.get()) { + // If IsComplete() returns false, the document isn't completely rendered. + // Since our renderer is gone, there's nothing to do, cancel it. Otherwise, + // the print job may finish without problem. + TerminatePrintJob(!document->IsComplete()); + } } bool PrintViewManagerBaseQt::OnMessageReceived(const IPC::Message& message, content::RenderFrameHost* render_frame_host) @@ -217,8 +221,7 @@ bool PrintViewManagerBaseQt::OnMessageReceived(const IPC::Message& message, cont bool handled = true; IPC_BEGIN_MESSAGE_MAP(PrintViewManagerBaseQt, message) IPC_MESSAGE_HANDLER(PrintHostMsg_DidPrintPage, OnDidPrintPage) - IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError, - OnShowInvalidPrinterSettingsError); + IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError, OnShowInvalidPrinterSettingsError); IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() return handled || PrintManager::OnMessageReceived(message, render_frame_host); @@ -328,7 +331,7 @@ void PrintViewManagerBaseQt::ShouldQuitFromInnerMessageLoop() m_isInsideInnerMessageLoop) { // We are in a message loop created by RenderAllMissingPagesNow. Quit from // it. - base::MessageLoop::current()->QuitWhenIdle(); + base::MessageLoop::current()->QuitWhenIdleClosure(); m_isInsideInnerMessageLoop = false; } } @@ -337,7 +340,7 @@ bool PrintViewManagerBaseQt::CreateNewPrintJob(printing::PrintJobWorkerOwner* jo { DCHECK(!m_isInsideInnerMessageLoop); - // Disconnect the current print_job_. + // Disconnect the current |m_printJob|. DisconnectFromCurrentPrintJob(); // We can't print if there is no renderer. @@ -354,7 +357,7 @@ bool PrintViewManagerBaseQt::CreateNewPrintJob(printing::PrintJobWorkerOwner* jo return false; m_printJob = new printing::PrintJob(); - m_printJob->Initialize(job, this, number_pages_); + m_printJob->Initialize(job, RenderSourceName(), number_pages_); m_registrar.Add(this, chrome::NOTIFICATION_PRINT_JOB_EVENT, content::Source<printing::PrintJob>(m_printJob.get())); m_didPrintingSucceed = false; @@ -383,13 +386,6 @@ void PrintViewManagerBaseQt::DisconnectFromCurrentPrintJob() #endif } -void PrintViewManagerBaseQt::PrintingDone(bool success) -{ - if (!m_printJob.get()) - return; - Send(new PrintMsg_PrintingDone(routing_id(), success)); -} - void PrintViewManagerBaseQt::TerminatePrintJob(bool cancel) { if (!m_printJob.get()) @@ -413,16 +409,18 @@ void PrintViewManagerBaseQt::TerminatePrintJob(bool cancel) void PrintViewManagerBaseQt::ReleasePrintJob() { + content::RenderFrameHost *rfh = web_contents() ? web_contents()->GetMainFrame() : nullptr; + if (!m_printJob.get()) return; - PrintingDone(m_didPrintingSucceed); + if (rfh) + rfh->Send(new PrintMsg_PrintingDone(rfh->GetRoutingID(), m_didPrintingSucceed)); m_registrar.Remove(this, chrome::NOTIFICATION_PRINT_JOB_EVENT, content::Source<printing::PrintJob>(m_printJob.get())); - m_printJob->DisconnectSource(); // Don't close the worker thread. - m_printJob = NULL; + m_printJob = nullptr; } @@ -440,15 +438,15 @@ bool PrintViewManagerBaseQt::RunInnerMessageLoop() { // memory-bound. static const int kPrinterSettingsTimeout = 60000; base::OneShotTimer quit_timer; + base::RunLoop runLoop; quit_timer.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(kPrinterSettingsTimeout), - base::MessageLoop::current(), &base::MessageLoop::QuitWhenIdle); + runLoop.QuitWhenIdleClosure()); m_isInsideInnerMessageLoop = true; // Need to enable recursive task. { - base::RunLoop runLoop; m_quitClosure = runLoop.QuitClosure(); base::MessageLoop* loop = base::MessageLoop::current(); base::MessageLoop::ScopedNestableTaskAllower allowNested(loop); @@ -514,7 +512,7 @@ void PrintViewManagerBaseQt::ReleasePrinterQuery() return; content::BrowserThread::PostTask( content::BrowserThread::IO, FROM_HERE, - base::Bind(&printing::PrinterQuery::StopWorker, printerQuery.get())); + base::BindOnce(&printing::PrinterQuery::StopWorker, printerQuery.get())); } // Originally from print_preview_message_handler.cc: @@ -525,8 +523,7 @@ void PrintViewManagerBaseQt::StopWorker(int documentCookie) { m_printerQueriesQueue->PopPrinterQuery(documentCookie); if (printer_query.get()) { content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, - base::Bind(&printing::PrinterQuery::StopWorker, - printer_query)); + base::BindOnce(&printing::PrinterQuery::StopWorker, printer_query)); } } |