Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1858)

Unified Diff: chrome/browser/printing/printing_message_filter.cc

Issue 480303002: Use document from preview for System Dialog printing on Windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Tue 08/19/2014 11:17:57.84 Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(), &params.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()) {

Powered by Google App Engine
This is Rietveld 408576698