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 4cdee5381c32cffbe56b28e8a7c7f62e4a79b5e2..b7ebbebcb3e416f3e8940b3a9b5179ce65aa5057 100644 |
--- a/chrome/browser/printing/print_job_worker.cc |
+++ b/chrome/browser/printing/print_job_worker.cc |
@@ -33,36 +33,17 @@ void HoldRefCallback(const scoped_refptr<printing::PrintJobWorkerOwner>& owner, |
namespace printing { |
-class PrintJobWorker::NotificationTask : public Task { |
- public: |
- NotificationTask() : print_job_(NULL), details_(NULL) {} |
- ~NotificationTask() {} |
- |
- // Initializes the object. This object can't be initialized in the constructor |
- // since it is not created directly. |
- void Init(PrintJobWorkerOwner* print_job, |
- JobEventDetails::Type detail_type, |
- PrintedDocument* document, |
- PrintedPage* page) { |
- DCHECK(!print_job_); |
- DCHECK(!details_); |
- print_job_ = print_job; |
- details_ = new JobEventDetails(detail_type, document, page); |
- } |
- |
- virtual void Run() { |
- // Send the notification in the right thread. |
- content::NotificationService::current()->Notify( |
- chrome::NOTIFICATION_PRINT_JOB_EVENT, |
- // We know that is is a PrintJob object in this circumstance. |
- content::Source<PrintJob>(static_cast<PrintJob*>(print_job_.get())), |
- content::Details<JobEventDetails>(details_)); |
- } |
- |
- // The job which originates this notification. |
- scoped_refptr<PrintJobWorkerOwner> print_job_; |
- scoped_refptr<JobEventDetails> details_; |
-}; |
+void NotificationCallback(PrintJobWorkerOwner* print_job, |
+ JobEventDetails::Type detail_type, |
+ PrintedDocument* document, |
+ PrintedPage* page) { |
+ JobEventDetails* details = new JobEventDetails(detail_type, document, page); |
+ content::NotificationService::current()->Notify( |
+ chrome::NOTIFICATION_PRINT_JOB_EVENT, |
+ // We know that is is a PrintJob object in this circumstance. |
+ content::Source<PrintJob>(static_cast<PrintJob*>(print_job)), |
+ content::Details<JobEventDetails>(details)); |
+} |
PrintJobWorker::PrintJobWorker(PrintJobWorkerOwner* owner) |
: Thread("Printing_Worker"), |
@@ -275,7 +256,7 @@ void PrintJobWorker::OnNewPage() { |
break; |
} |
// The page is there, print it. |
- SpoolPage(*page); |
+ SpoolPage(page); |
++page_number_; |
if (page_number_ == PageNumber::npos()) { |
OnDocumentDone(); |
@@ -302,29 +283,24 @@ void PrintJobWorker::OnDocumentDone() { |
return; |
} |
- // Tell everyone! |
- NotificationTask* task = new NotificationTask(); |
- task->Init(owner_, |
- JobEventDetails::DOC_DONE, |
- document_.get(), |
- NULL); |
- owner_->message_loop()->PostTask(FROM_HERE, task); |
+ owner_->message_loop()->PostTask( |
+ FROM_HERE, base::Bind(NotificationCallback, make_scoped_refptr(owner_), |
+ JobEventDetails::DOC_DONE, document_, |
+ scoped_refptr<PrintedPage>())); |
// Makes sure the variables are reinitialized. |
document_ = NULL; |
} |
-void PrintJobWorker::SpoolPage(PrintedPage& page) { |
+void PrintJobWorker::SpoolPage(PrintedPage* page) { |
DCHECK_EQ(message_loop(), MessageLoop::current()); |
DCHECK_NE(page_number_, PageNumber::npos()); |
// Signal everyone that the page is about to be printed. |
- NotificationTask* task = new NotificationTask(); |
- task->Init(owner_, |
- JobEventDetails::NEW_PAGE, |
- document_.get(), |
- &page); |
- owner_->message_loop()->PostTask(FROM_HERE, task); |
+ owner_->message_loop()->PostTask( |
+ FROM_HERE, base::Bind(NotificationCallback, make_scoped_refptr(owner_), |
+ JobEventDetails::NEW_PAGE, document_, |
+ make_scoped_refptr(page))); |
// Preprocess. |
if (printing_context_->NewPage() != PrintingContext::OK) { |
@@ -334,9 +310,9 @@ void PrintJobWorker::SpoolPage(PrintedPage& page) { |
// Actual printing. |
#if defined(OS_WIN) || defined(OS_MACOSX) |
- document_->RenderPrintedPage(page, printing_context_->context()); |
+ document_->RenderPrintedPage(*page, printing_context_->context()); |
#elif defined(OS_POSIX) |
- document_->RenderPrintedPage(page, printing_context_.get()); |
+ document_->RenderPrintedPage(*page, printing_context_.get()); |
#endif |
// Postprocess. |
@@ -346,12 +322,11 @@ void PrintJobWorker::SpoolPage(PrintedPage& page) { |
} |
// Signal everyone that the page is printed. |
- task = new NotificationTask(); |
- task->Init(owner_, |
- JobEventDetails::PAGE_DONE, |
- document_.get(), |
- &page); |
- owner_->message_loop()->PostTask(FROM_HERE, task); |
+ owner_->message_loop()->PostTask( |
+ FROM_HERE, |
+ base::Bind(NotificationCallback, make_scoped_refptr(owner_), |
+ JobEventDetails::PAGE_DONE, document_, |
+ make_scoped_refptr(page))); |
} |
void PrintJobWorker::OnFailure() { |
@@ -360,12 +335,10 @@ void PrintJobWorker::OnFailure() { |
// We may loose our last reference by broadcasting the FAILED event. |
scoped_refptr<PrintJobWorkerOwner> handle(owner_); |
- NotificationTask* task = new NotificationTask(); |
- task->Init(owner_, |
- JobEventDetails::FAILED, |
- document_.get(), |
- NULL); |
- owner_->message_loop()->PostTask(FROM_HERE, task); |
+ owner_->message_loop()->PostTask( |
+ FROM_HERE, base::Bind(NotificationCallback, make_scoped_refptr(owner_), |
+ JobEventDetails::FAILED, document_, |
+ scoped_refptr<PrintedPage>())); |
Cancel(); |
// Makes sure the variables are reinitialized. |