OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/printing/print_job.h" | 5 #include "chrome/browser/printing/print_job.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 // Real work is done in PrintJobWorker::StartPrinting(). | 130 // Real work is done in PrintJobWorker::StartPrinting(). |
131 worker_->PostTask(FROM_HERE, | 131 worker_->PostTask(FROM_HERE, |
132 base::Bind(&HoldRefCallback, make_scoped_refptr(this), | 132 base::Bind(&HoldRefCallback, make_scoped_refptr(this), |
133 base::Bind(&PrintJobWorker::StartPrinting, | 133 base::Bind(&PrintJobWorker::StartPrinting, |
134 base::Unretained(worker_.get()), | 134 base::Unretained(worker_.get()), |
135 base::RetainedRef(document_)))); | 135 base::RetainedRef(document_)))); |
136 // Set the flag right now. | 136 // Set the flag right now. |
137 is_job_pending_ = true; | 137 is_job_pending_ = true; |
138 | 138 |
139 // Tell everyone! | 139 // Tell everyone! |
140 scoped_refptr<JobEventDetails> details( | 140 scoped_refptr<JobEventDetails> details(new JobEventDetails( |
141 new JobEventDetails(JobEventDetails::NEW_DOC, document_.get(), nullptr)); | 141 JobEventDetails::NEW_DOC, 0, document_.get(), nullptr)); |
142 content::NotificationService::current()->Notify( | 142 content::NotificationService::current()->Notify( |
143 chrome::NOTIFICATION_PRINT_JOB_EVENT, | 143 chrome::NOTIFICATION_PRINT_JOB_EVENT, |
144 content::Source<PrintJob>(this), | 144 content::Source<PrintJob>(this), |
145 content::Details<JobEventDetails>(details.get())); | 145 content::Details<JobEventDetails>(details.get())); |
146 } | 146 } |
147 | 147 |
148 void PrintJob::Stop() { | 148 void PrintJob::Stop() { |
149 DCHECK(RunsTasksOnCurrentThread()); | 149 DCHECK(RunsTasksOnCurrentThread()); |
150 | 150 |
151 if (quit_factory_.HasWeakPtrs()) { | 151 if (quit_factory_.HasWeakPtrs()) { |
(...skipping 24 matching lines...) Expand all Loading... |
176 scoped_refptr<PrintJob> handle(this); | 176 scoped_refptr<PrintJob> handle(this); |
177 | 177 |
178 DCHECK(RunsTasksOnCurrentThread()); | 178 DCHECK(RunsTasksOnCurrentThread()); |
179 if (worker_ && worker_->IsRunning()) { | 179 if (worker_ && worker_->IsRunning()) { |
180 // Call this right now so it renders the context invalid. Do not use | 180 // Call this right now so it renders the context invalid. Do not use |
181 // InvokeLater since it would take too much time. | 181 // InvokeLater since it would take too much time. |
182 worker_->Cancel(); | 182 worker_->Cancel(); |
183 } | 183 } |
184 // Make sure a Cancel() is broadcast. | 184 // Make sure a Cancel() is broadcast. |
185 scoped_refptr<JobEventDetails> details( | 185 scoped_refptr<JobEventDetails> details( |
186 new JobEventDetails(JobEventDetails::FAILED, nullptr, nullptr)); | 186 new JobEventDetails(JobEventDetails::FAILED, 0, nullptr, nullptr)); |
187 content::NotificationService::current()->Notify( | 187 content::NotificationService::current()->Notify( |
188 chrome::NOTIFICATION_PRINT_JOB_EVENT, | 188 chrome::NOTIFICATION_PRINT_JOB_EVENT, |
189 content::Source<PrintJob>(this), | 189 content::Source<PrintJob>(this), |
190 content::Details<JobEventDetails>(details.get())); | 190 content::Details<JobEventDetails>(details.get())); |
191 Stop(); | 191 Stop(); |
192 is_canceling_ = false; | 192 is_canceling_ = false; |
193 } | 193 } |
194 | 194 |
195 bool PrintJob::FlushJob(base::TimeDelta timeout) { | 195 bool PrintJob::FlushJob(base::TimeDelta timeout) { |
196 // Make sure the object outlive this message loop. | 196 // Make sure the object outlive this message loop. |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 } | 401 } |
402 | 402 |
403 void PrintJob::OnDocumentDone() { | 403 void PrintJob::OnDocumentDone() { |
404 // Be sure to live long enough. The instance could be destroyed by the | 404 // Be sure to live long enough. The instance could be destroyed by the |
405 // JOB_DONE broadcast. | 405 // JOB_DONE broadcast. |
406 scoped_refptr<PrintJob> handle(this); | 406 scoped_refptr<PrintJob> handle(this); |
407 | 407 |
408 // Stop the worker thread. | 408 // Stop the worker thread. |
409 Stop(); | 409 Stop(); |
410 | 410 |
411 scoped_refptr<JobEventDetails> details( | 411 scoped_refptr<JobEventDetails> details(new JobEventDetails( |
412 new JobEventDetails(JobEventDetails::JOB_DONE, document_.get(), nullptr)); | 412 JobEventDetails::JOB_DONE, 0, document_.get(), nullptr)); |
413 content::NotificationService::current()->Notify( | 413 content::NotificationService::current()->Notify( |
414 chrome::NOTIFICATION_PRINT_JOB_EVENT, | 414 chrome::NOTIFICATION_PRINT_JOB_EVENT, |
415 content::Source<PrintJob>(this), | 415 content::Source<PrintJob>(this), |
416 content::Details<JobEventDetails>(details.get())); | 416 content::Details<JobEventDetails>(details.get())); |
417 } | 417 } |
418 | 418 |
419 void PrintJob::ControlledWorkerShutdown() { | 419 void PrintJob::ControlledWorkerShutdown() { |
420 DCHECK(RunsTasksOnCurrentThread()); | 420 DCHECK(RunsTasksOnCurrentThread()); |
421 | 421 |
422 // The deadlock this code works around is specific to window messaging on | 422 // The deadlock this code works around is specific to window messaging on |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 | 459 |
460 void PrintJob::HoldUntilStopIsCalled() { | 460 void PrintJob::HoldUntilStopIsCalled() { |
461 } | 461 } |
462 | 462 |
463 void PrintJob::Quit() { | 463 void PrintJob::Quit() { |
464 base::MessageLoop::current()->QuitWhenIdle(); | 464 base::MessageLoop::current()->QuitWhenIdle(); |
465 } | 465 } |
466 | 466 |
467 // Takes settings_ ownership and will be deleted in the receiving thread. | 467 // Takes settings_ ownership and will be deleted in the receiving thread. |
468 JobEventDetails::JobEventDetails(Type type, | 468 JobEventDetails::JobEventDetails(Type type, |
| 469 int job_id, |
469 PrintedDocument* document, | 470 PrintedDocument* document, |
470 PrintedPage* page) | 471 PrintedPage* page) |
471 : document_(document), | 472 : document_(document), page_(page), type_(type), job_id_(job_id) {} |
472 page_(page), | |
473 type_(type) { | |
474 } | |
475 | 473 |
476 JobEventDetails::~JobEventDetails() { | 474 JobEventDetails::~JobEventDetails() { |
477 } | 475 } |
478 | 476 |
479 PrintedDocument* JobEventDetails::document() const { return document_.get(); } | 477 PrintedDocument* JobEventDetails::document() const { return document_.get(); } |
480 | 478 |
481 PrintedPage* JobEventDetails::page() const { return page_.get(); } | 479 PrintedPage* JobEventDetails::page() const { return page_.get(); } |
482 | 480 |
483 } // namespace printing | 481 } // namespace printing |
OLD | NEW |