Index: chrome/browser/printing/print_job_worker.cc |
diff --git a/chrome/browser/printing/print_job_worker.cc b/chrome/browser/printing/print_job_worker.cc |
index 375c240784ced7f72e4bd3568a02dab8da856a57..27a553d4b736b60fa6ffdc9a7c5e54cc09d564f6 100644 |
--- a/chrome/browser/printing/print_job_worker.cc |
+++ b/chrome/browser/printing/print_job_worker.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/printing/print_job_worker.h" |
#include "base/message_loop.h" |
+#include "chrome/browser/chrome_thread.h" |
#include "chrome/browser/printing/print_job.h" |
#include "chrome/common/notification_service.h" |
#include "printing/printed_document.h" |
@@ -64,7 +65,7 @@ void PrintJobWorker::SetNewOwner(PrintJobWorkerOwner* new_owner) { |
} |
void PrintJobWorker::GetSettings(bool ask_user_for_settings, |
- HWND parent_window, |
+ gfx::NativeWindow parent_window, |
int document_page_count, |
bool has_selection) { |
DCHECK_EQ(message_loop(), MessageLoop::current()); |
@@ -74,15 +75,24 @@ void PrintJobWorker::GetSettings(bool ask_user_for_settings, |
// destroyed by a task. |
MessageLoop::current()->SetNestableTasksAllowed(true); |
- PrintingContext::Result result; |
if (ask_user_for_settings) { |
- result = printing_context_.AskUserForSettings(parent_window, |
- document_page_count, |
- has_selection); |
+#if defined(OS_MACOSX) |
+ ChromeThread::GetMessageLoop(ChromeThread::UI)->PostTask( |
+ FROM_HERE, NewRunnableMethod(this, &PrintJobWorker::GetSettingsWithUI, |
+ parent_window, document_page_count, |
+ has_selection)); |
+#else |
+ PrintingContext::Result result = printing_context_.AskUserForSettings( |
+ parent_window, document_page_count, has_selection); |
+ GetSettingsDone(result); |
+#endif |
} else { |
- result = printing_context_.UseDefaultSettings(); |
+ PrintingContext::Result result = printing_context_.UseDefaultSettings(); |
+ GetSettingsDone(result); |
} |
+} |
+void PrintJobWorker::GetSettingsDone(PrintingContext::Result result) { |
// Most PrintingContext functions may start a message loop and process |
// message recursively, so disable recursive task processing. |
MessageLoop::current()->SetNestableTasksAllowed(false); |
@@ -97,13 +107,29 @@ void PrintJobWorker::GetSettings(bool ask_user_for_settings, |
result)); |
} |
+#if defined(OS_MACOSX) |
+void PrintJobWorker::GetSettingsWithUI(gfx::NativeWindow parent_window, |
+ int document_page_count, |
+ bool has_selection) { |
+ DCHECK_EQ(ChromeThread::GetMessageLoop(ChromeThread::UI), |
+ MessageLoop::current()); |
+ |
+ PrintingContext::Result result = printing_context_.AskUserForSettings( |
+ parent_window, document_page_count, has_selection); |
+ message_loop()->PostTask(FROM_HERE, NewRunnableMethod( |
pink (ping after 24hrs)
2009/10/13 21:04:51
so this will now run GetSettingsDone on the UI thr
Amanda Walker
2009/10/13 21:20:55
No, it'll run it on the PrintJobWorker thread. me
stuartmorgan
2009/10/13 22:07:43
Right; this is a PostTask rather than a straight c
|
+ this, &PrintJobWorker::GetSettingsDone, result)); |
+} |
+#endif |
+ |
void PrintJobWorker::StartPrinting(PrintedDocument* new_document) { |
DCHECK_EQ(message_loop(), MessageLoop::current()); |
DCHECK_EQ(page_number_, PageNumber::npos()); |
DCHECK_EQ(document_, new_document); |
DCHECK(document_.get()); |
DCHECK(new_document->settings().Equals(printing_context_.settings())); |
+#if !defined(OS_MACOSX) |
pink (ping after 24hrs)
2009/10/13 21:04:51
I see below why this the case, but it's 150 lines
stuartmorgan
2009/10/13 22:07:43
I have a header comment on context() explaining wh
|
DCHECK(printing_context_.context()); |
+#endif |
if (!document_.get() || page_number_ != PageNumber::npos() || |
document_ != new_document) { |
return; |
@@ -130,7 +156,9 @@ void PrintJobWorker::OnDocumentChanged(PrintedDocument* new_document) { |
DCHECK_EQ(page_number_, PageNumber::npos()); |
DCHECK(!new_document || |
new_document->settings().Equals(printing_context_.settings())); |
+#if !defined(OS_MACOSX) |
DCHECK(printing_context_.context()); |
+#endif |
if (page_number_ != PageNumber::npos()) |
return; |
@@ -144,9 +172,11 @@ void PrintJobWorker::OnNewPage() { |
} |
// message_loop() could return NULL when the print job is cancelled. |
DCHECK_EQ(message_loop(), MessageLoop::current()); |
+#if !defined(OS_MACOSX) |
DCHECK(printing_context_.context()); |
if (!printing_context_.context()) |
return; |
+#endif |
if (page_number_ == PageNumber::npos()) { |
// Find first page to print. |
@@ -199,7 +229,9 @@ void PrintJobWorker::OnDocumentDone() { |
DCHECK_EQ(message_loop(), MessageLoop::current()); |
DCHECK_EQ(page_number_, PageNumber::npos()); |
DCHECK(document_.get()); |
+#if !defined(OS_MACOSX) |
DCHECK(printing_context_.context()); |
+#endif |
if (printing_context_.DocumentDone() != PrintingContext::OK) { |
OnFailure(); |
@@ -221,7 +253,9 @@ void PrintJobWorker::OnDocumentDone() { |
void PrintJobWorker::SpoolPage(PrintedPage& page) { |
DCHECK_EQ(message_loop(), MessageLoop::current()); |
DCHECK_NE(page_number_, PageNumber::npos()); |
+#if !defined(OS_MACOSX) |
DCHECK(printing_context_.context()); |
+#endif |
// Signal everyone that the page is about to be printed. |
NotificationTask* task = new NotificationTask(); |
task->Init(owner_, |
@@ -236,6 +270,10 @@ void PrintJobWorker::SpoolPage(PrintedPage& page) { |
return; |
} |
+#if defined(OS_MACOSX) |
+ // Context is only valid between NewPage and PageDone, so we only check here. |
+ DCHECK(printing_context_.context()); |
+#endif |
// Actual printing. |
document_->RenderPrintedPage(page, printing_context_.context()); |