summaryrefslogtreecommitdiffstats
path: root/src/core/print_view_manager_base_qt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/print_view_manager_base_qt.cpp')
-rw-r--r--src/core/print_view_manager_base_qt.cpp75
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));
}
}