| Index: chrome/browser/printing/printing_message_filter.cc
|
| diff --git a/chrome/browser/printing/printing_message_filter.cc b/chrome/browser/printing/printing_message_filter.cc
|
| index 485cff692b27bdad64eb978716563fd6ff49617a..94301a67c98afcb9253aee5f4adcc4fc6827fbfa 100644
|
| --- a/chrome/browser/printing/printing_message_filter.cc
|
| +++ b/chrome/browser/printing/printing_message_filter.cc
|
| @@ -8,8 +8,8 @@
|
|
|
| #include "base/bind.h"
|
| #include "chrome/browser/browser_process.h"
|
| -#include "chrome/browser/printing/printer_query.h"
|
| #include "chrome/browser/printing/print_job_manager.h"
|
| +#include "chrome/browser/printing/printer_query.h"
|
| #include "chrome/browser/printing/printing_ui_web_contents_observer.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/profiles/profile_io_data.h"
|
| @@ -36,7 +36,9 @@
|
| #include "base/strings/string_number_conversions.h"
|
| #include "chrome/browser/printing/print_view_manager_basic.h"
|
| #include "printing/printing_context_android.h"
|
| -#endif
|
| +#else // defined(OS_ANDROID)
|
| +#include "chrome/browser/printing/print_preview_dialog_controller.h"
|
| +#endif // defined(OS_ANDROID)
|
|
|
| using content::BrowserThread;
|
|
|
| @@ -413,6 +415,7 @@ void PrintingMessageFilter::OnScriptedPrintReply(
|
| }
|
|
|
| #if defined(OS_ANDROID)
|
| +
|
| void PrintingMessageFilter::UpdateFileDescriptor(int render_view_id, int fd) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| content::WebContents* wc = GetWebContentsForRenderView(render_view_id);
|
| @@ -422,40 +425,102 @@ void PrintingMessageFilter::UpdateFileDescriptor(int render_view_id, int fd) {
|
| printing::PrintViewManagerBasic::FromWebContents(wc);
|
| print_view_manager->set_file_descriptor(base::FileDescriptor(fd, false));
|
| }
|
| -#endif
|
|
|
| void PrintingMessageFilter::OnUpdatePrintSettings(
|
| - int document_cookie, const base::DictionaryValue& job_settings,
|
| + int render_view_id,
|
| + int document_cookie,
|
| + const base::DictionaryValue& job_settings,
|
| IPC::Message* reply_msg) {
|
| - scoped_refptr<printing::PrinterQuery> printer_query;
|
| + scoped_ptr<base::DictionaryValue> new_settings(job_settings.DeepCopy());
|
| +
|
| + OnUpdatePrintSettingsOnIOThread(
|
| + document_cookie,
|
| + base::Bind(
|
| + &PrintingMessageFilter::OnUpdatePrintSettingsReply, this, reply_msg),
|
| + scoped_ptr<PrintingUIWebContentsObserver>(),
|
| + base::Passed(&new_settings));
|
| +}
|
| +
|
| +#else // defined(OS_ANDROID)
|
| +
|
| +void PrintingMessageFilter::OnUpdatePrintSettings(
|
| + int render_view_id,
|
| + int document_cookie,
|
| + const base::DictionaryValue& job_settings,
|
| + IPC::Message* reply_msg) {
|
| + scoped_ptr<base::DictionaryValue> new_settings(job_settings.DeepCopy());
|
| +
|
| + BrowserThread::PostTaskAndReplyWithResult(
|
| + BrowserThread::UI,
|
| + FROM_HERE,
|
| + base::Bind(&PrintingMessageFilter::OnUpdatePrintSettingsOnUIThread,
|
| + this,
|
| + render_view_id),
|
| + base::Bind(&PrintingMessageFilter::OnUpdatePrintSettingsOnIOThread,
|
| + this,
|
| + document_cookie,
|
| + base::Bind(&PrintingMessageFilter::OnUpdatePrintSettingsReply,
|
| + this,
|
| + reply_msg),
|
| + base::Passed(&new_settings)));
|
| +}
|
| +
|
| +scoped_ptr<PrintingUIWebContentsObserver>
|
| +PrintingMessageFilter::OnUpdatePrintSettingsOnUIThread(int render_view_id) {
|
| + scoped_ptr<PrintingUIWebContentsObserver> wc_observer;
|
| + content::WebContents* wc = GetWebContentsForRenderView(render_view_id);
|
| + if (wc) {
|
| + printing::PrintPreviewDialogController* dialog_controller =
|
| + printing::PrintPreviewDialogController::GetInstance();
|
| + if (dialog_controller) {
|
| + wc = dialog_controller->GetInitiator(wc);
|
| + if (wc)
|
| + wc_observer.reset(new PrintingUIWebContentsObserver(wc));
|
| + }
|
| + }
|
| +
|
| + return wc_observer.Pass();
|
| +}
|
| +
|
| +#endif // defined(OS_ANDROID)
|
| +
|
| +void PrintingMessageFilter::OnUpdatePrintSettingsOnIOThread(
|
| + int document_cookie,
|
| + const OnUpdatePrintSettingsCallback& callback,
|
| + scoped_ptr<base::DictionaryValue> new_settings,
|
| + scoped_ptr<PrintingUIWebContentsObserver> wc_observer) {
|
| if (!profile_io_data_->printing_enabled()->GetValue()) {
|
| // Reply with NULL query.
|
| - OnUpdatePrintSettingsReply(printer_query, reply_msg);
|
| + callback.Run(NULL);
|
| return;
|
| }
|
| - printer_query = queue_->PopPrinterQuery(document_cookie);
|
| + scoped_refptr<printing::PrinterQuery> printer_query =
|
| + queue_->PopPrinterQuery(document_cookie);
|
| if (!printer_query)
|
| printer_query = queue_->CreatePrinterQuery();
|
| - printer_query->SetSettings(
|
| - job_settings,
|
| - base::Bind(&PrintingMessageFilter::OnUpdatePrintSettingsReply, this,
|
| - printer_query, reply_msg));
|
| + printer_query->SetSettings(wc_observer.Pass(),
|
| + new_settings.Pass(),
|
| + base::Bind(callback, printer_query));
|
| }
|
|
|
| void PrintingMessageFilter::OnUpdatePrintSettingsReply(
|
| - scoped_refptr<printing::PrinterQuery> printer_query,
|
| - IPC::Message* reply_msg) {
|
| + IPC::Message* reply_msg,
|
| + scoped_refptr<printing::PrinterQuery> printer_query) {
|
| PrintMsg_PrintPages_Params params;
|
| if (!printer_query.get() ||
|
| - printer_query->last_status() != printing::PrintingContext::OK) {
|
| + printer_query->last_status() == printing::PrintingContext::FAILED) {
|
| params.Reset();
|
| } else {
|
| RenderParamsFromPrintSettings(printer_query->settings(), ¶ms.params);
|
| - params.params.document_cookie = printer_query->cookie();
|
| params.pages =
|
| printing::PageRange::GetPages(printer_query->settings().ranges());
|
| }
|
| - PrintHostMsg_UpdatePrintSettings::WriteReplyParams(reply_msg, params);
|
| + params.params.document_cookie = printer_query->cookie();
|
| + PrintHostMsg_UpdatePrintSettings::WriteReplyParams(
|
| + reply_msg,
|
| + params,
|
| + printer_query.get() &&
|
| + (printer_query->last_status() == printing::PrintingContext::CANCEL));
|
| Send(reply_msg);
|
| // If user hasn't cancelled.
|
| if (printer_query.get()) {
|
|
|