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 a100d44db5e1b680e00cbd84eb5d16ec23568880..c392979b9433fdfa9bb8757bf7437bf118efdb23 100644 |
--- a/chrome/browser/printing/printing_message_filter.cc |
+++ b/chrome/browser/printing/printing_message_filter.cc |
@@ -13,6 +13,9 @@ |
#include "chrome/browser/printing/print_job_manager.h" |
#include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" |
#include "chrome/common/print_messages.h" |
+#include "content/public/browser/render_view_host.h" |
+#include "content/public/browser/web_contents.h" |
+#include "content/public/browser/web_contents_view.h" |
#if defined(OS_CHROMEOS) |
#include <fcntl.h> |
@@ -22,9 +25,6 @@ |
#include "base/file_util.h" |
#include "base/lazy_instance.h" |
#include "chrome/browser/printing/print_dialog_cloud.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/browser/web_contents_view.h" |
#endif |
using content::BrowserThread; |
@@ -90,9 +90,10 @@ PrintingMessageFilter::~PrintingMessageFilter() { |
void PrintingMessageFilter::OverrideThreadForMessage( |
const IPC::Message& message, BrowserThread::ID* thread) { |
#if defined(OS_CHROMEOS) |
- if (message.type() == PrintHostMsg_AllocateTempFileForPrinting::ID || |
- message.type() == PrintHostMsg_TempFileForPrintingWritten::ID) { |
+ if (message.type() == PrintHostMsg_AllocateTempFileForPrinting::ID) { |
*thread = BrowserThread::FILE; |
+ } else if (message.type() == PrintHostMsg_TempFileForPrintingWritten::ID) { |
+ *thread = BrowserThread::UI; |
} |
#endif |
} |
@@ -161,7 +162,7 @@ void PrintingMessageFilter::OnAllocateTempFileForPrinting( |
void PrintingMessageFilter::OnTempFileForPrintingWritten(int render_view_id, |
int sequence_number) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
Lei Zhang
2012/06/11 23:32:28
If you do this, then |g_printing_file_descriptor_m
Albert Bodenhamer
2012/06/11 23:54:58
Argh! Yeah. I should have caught that.
CrOS DID
Albert Bodenhamer
2012/06/12 01:19:02
Done.
|
SequenceToPathMap* map = &g_printing_file_descriptor_map.Get().map; |
SequenceToPathMap::iterator it = map->find(sequence_number); |
if (it == map->end()) { |
@@ -169,10 +170,7 @@ void PrintingMessageFilter::OnTempFileForPrintingWritten(int render_view_id, |
"renderer: " << sequence_number; |
return; |
} |
- |
- content::RenderViewHost* view = content::RenderViewHost::FromID( |
- render_process_id_, render_view_id); |
- content::WebContents* wc = content::WebContents::FromRenderViewHost(view); |
+ content::WebContents* wc = GetWebContentsForRenderView(render_view_id); |
print_dialog_cloud::CreatePrintDialogForFile( |
wc->GetBrowserContext(), |
wc->GetView()->GetTopLevelNativeWindow(), |
@@ -187,25 +185,57 @@ void PrintingMessageFilter::OnTempFileForPrintingWritten(int render_view_id, |
} |
#endif // defined(OS_CHROMEOS) |
-void PrintingMessageFilter::OnGetDefaultPrintSettings(IPC::Message* reply_msg) { |
+content::WebContents* PrintingMessageFilter::GetWebContentsForRenderView( |
+ int render_view_id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ content::RenderViewHost* view = content::RenderViewHost::FromID( |
+ render_process_id_, render_view_id); |
+ return content::WebContents::FromRenderViewHost(view); |
+} |
+ |
+void PrintingMessageFilter::GetPrintSettingsForRenderView( |
+ int render_view_id, |
+ GetPrintSettingsForRenderViewParams params, |
+ const base::Closure& callback, |
+ scoped_refptr<printing::PrinterQuery> printer_query) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ content::WebContents* wc = GetWebContentsForRenderView(render_view_id); |
+ |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&printing::PrinterQuery::GetSettings, printer_query, |
+ params.ask_user_for_settings, wc->GetView()->GetNativeView(), |
+ params.expected_page_count, params.has_selection, |
+ params.margin_type, callback)); |
+} |
+ |
+void PrintingMessageFilter::OnGetDefaultPrintSettings( |
+ IPC::Message* reply_msg) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
scoped_refptr<printing::PrinterQuery> printer_query; |
if (!print_job_manager_->printing_enabled()) { |
// Reply with NULL query. |
OnGetDefaultPrintSettingsReply(printer_query, reply_msg); |
return; |
} |
- |
print_job_manager_->PopPrinterQuery(0, &printer_query); |
if (!printer_query.get()) |
printer_query = new printing::PrinterQuery; |
// Loads default settings. This is asynchronous, only the IPC message sender |
// will hang until the settings are retrieved. |
- printer_query->GetSettings( |
- printing::PrinterQuery::DEFAULTS, NULL, 0, false, |
- printing::DEFAULT_MARGINS, |
- base::Bind(&PrintingMessageFilter::OnGetDefaultPrintSettingsReply, this, |
- printer_query, reply_msg)); |
+ GetPrintSettingsForRenderViewParams params; |
+ params.ask_user_for_settings = printing::PrinterQuery::DEFAULTS; |
+ params.expected_page_count = 0; |
+ params.has_selection = false; |
+ params.margin_type = printing::DEFAULT_MARGINS; |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&PrintingMessageFilter::GetPrintSettingsForRenderView, this, |
+ reply_msg->routing_id(), params, |
+ base::Bind(&PrintingMessageFilter::OnGetDefaultPrintSettingsReply, |
+ this, printer_query, reply_msg), |
+ printer_query)); |
} |
void PrintingMessageFilter::OnGetDefaultPrintSettingsReply( |
@@ -235,20 +265,24 @@ void PrintingMessageFilter::OnGetDefaultPrintSettingsReply( |
void PrintingMessageFilter::OnScriptedPrint( |
const PrintHostMsg_ScriptedPrint_Params& params, |
IPC::Message* reply_msg) { |
- gfx::NativeView host_view = |
- gfx::NativeViewFromIdInBrowser(params.host_window_id); |
- |
scoped_refptr<printing::PrinterQuery> printer_query; |
print_job_manager_->PopPrinterQuery(params.cookie, &printer_query); |
if (!printer_query.get()) { |
printer_query = new printing::PrinterQuery; |
} |
- |
- printer_query->GetSettings( |
- printing::PrinterQuery::ASK_USER, host_view, params.expected_pages_count, |
- params.has_selection, params.margin_type, |
- base::Bind(&PrintingMessageFilter::OnScriptedPrintReply, this, |
- printer_query, reply_msg)); |
+ GetPrintSettingsForRenderViewParams settings_params; |
+ settings_params.ask_user_for_settings = printing::PrinterQuery::ASK_USER; |
+ settings_params.expected_page_count = params.expected_pages_count; |
+ settings_params.has_selection = params.has_selection; |
+ settings_params.margin_type = params.margin_type; |
+ |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&PrintingMessageFilter::GetPrintSettingsForRenderView, this, |
+ reply_msg->routing_id(), settings_params, |
+ base::Bind(&PrintingMessageFilter::OnScriptedPrintReply, this, |
+ printer_query, reply_msg), |
+ printer_query)); |
} |
void PrintingMessageFilter::OnScriptedPrintReply( |