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

Side by Side Diff: chrome/browser/printing/print_job.cc

Issue 276004: Wire up printing on the Mac (Closed)
Patch Set: Created 11 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/timer.h" 8 #include "base/timer.h"
9 #include "chrome/browser/printing/print_job_worker.h" 9 #include "chrome/browser/printing/print_job_worker.h"
10 #include "chrome/common/notification_service.h" 10 #include "chrome/common/notification_service.h"
11 #include "printing/printed_document.h" 11 #include "printing/printed_document.h"
12 #include "printing/printed_page.h" 12 #include "printing/printed_page.h"
13 13
14 #ifdef _MSC_VER 14 #ifdef _MSC_VER
15 #pragma warning(disable:4355) // 'this' : used in base member initializer list 15 #pragma warning(disable:4355) // 'this' : used in base member initializer list
16 #endif 16 #endif
17 17
18 using base::TimeDelta; 18 using base::TimeDelta;
19 19
20 namespace printing { 20 namespace printing {
21 21
22 PrintJob::PrintJob() 22 PrintJob::PrintJob()
23 : ui_message_loop_(MessageLoop::current()), 23 : ui_message_loop_(MessageLoop::current()),
24 source_(NULL),
24 worker_(), 25 worker_(),
25 source_(NULL),
26 settings_(), 26 settings_(),
27 is_job_pending_(false), 27 is_job_pending_(false),
28 is_print_dialog_box_shown_(false), 28 is_print_dialog_box_shown_(false),
29 is_canceling_(false) { 29 is_canceling_(false) {
30 DCHECK(ui_message_loop_); 30 DCHECK(ui_message_loop_);
31 ui_message_loop_->AddDestructionObserver(this); 31 ui_message_loop_->AddDestructionObserver(this);
32 } 32 }
33 33
34 PrintJob::~PrintJob() { 34 PrintJob::~PrintJob() {
35 ui_message_loop_->RemoveDestructionObserver(this); 35 ui_message_loop_->RemoveDestructionObserver(this);
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 scoped_refptr<JobEventDetails> details( 277 scoped_refptr<JobEventDetails> details(
278 new JobEventDetails(JobEventDetails::JOB_DONE, document_.get(), NULL)); 278 new JobEventDetails(JobEventDetails::JOB_DONE, document_.get(), NULL));
279 NotificationService::current()->Notify( 279 NotificationService::current()->Notify(
280 NotificationType::PRINT_JOB_EVENT, 280 NotificationType::PRINT_JOB_EVENT,
281 Source<PrintJob>(this), 281 Source<PrintJob>(this),
282 Details<JobEventDetails>(details.get())); 282 Details<JobEventDetails>(details.get()));
283 } 283 }
284 284
285 void PrintJob::ControlledWorkerShutdown() { 285 void PrintJob::ControlledWorkerShutdown() {
286 DCHECK_EQ(ui_message_loop_, MessageLoop::current()); 286 DCHECK_EQ(ui_message_loop_, MessageLoop::current());
287 #if defined(OS_WIN)
pink (ping after 24hrs) 2009/10/13 21:04:51 add a todo to come back to this on mac and comment
stuartmorgan 2009/10/13 22:07:43 I don't think we'll ever need to come back to this
287 // We could easily get into a deadlock case if worker_->Stop() is used; the 288 // We could easily get into a deadlock case if worker_->Stop() is used; the
288 // printer driver created a window as a child of the browser window. By 289 // printer driver created a window as a child of the browser window. By
289 // canceling the job, the printer driver initiated dialog box is destroyed, 290 // canceling the job, the printer driver initiated dialog box is destroyed,
290 // which sends a blocking message to its parent window. If the browser window 291 // which sends a blocking message to its parent window. If the browser window
291 // thread is not processing messages, a deadlock occurs. 292 // thread is not processing messages, a deadlock occurs.
292 // 293 //
293 // This function ensures that the dialog box will be destroyed in a timely 294 // This function ensures that the dialog box will be destroyed in a timely
294 // manner by the mere fact that the thread will terminate. So the potential 295 // manner by the mere fact that the thread will terminate. So the potential
295 // deadlock is eliminated. 296 // deadlock is eliminated.
296 worker_->StopSoon(); 297 worker_->StopSoon();
(...skipping 19 matching lines...) Expand all
316 } 317 }
317 else if (result == WAIT_OBJECT_0) { 318 else if (result == WAIT_OBJECT_0) {
318 // The thread quit. 319 // The thread quit.
319 break; 320 break;
320 } else { 321 } else {
321 // An error occured. Assume the thread quit. 322 // An error occured. Assume the thread quit.
322 NOTREACHED(); 323 NOTREACHED();
323 break; 324 break;
324 } 325 }
325 } 326 }
327 #endif
326 328
327 // Now make sure the thread object is cleaned up. 329 // Now make sure the thread object is cleaned up.
328 worker_->Stop(); 330 worker_->Stop();
329 } 331 }
330 332
331 // Takes settings_ ownership and will be deleted in the receiving thread. 333 // Takes settings_ ownership and will be deleted in the receiving thread.
332 JobEventDetails::JobEventDetails(Type type, 334 JobEventDetails::JobEventDetails(Type type,
333 PrintedDocument* document, 335 PrintedDocument* document,
334 PrintedPage* page) 336 PrintedPage* page)
335 : document_(document), 337 : document_(document),
336 page_(page), 338 page_(page),
337 type_(type) { 339 type_(type) {
338 } 340 }
339 341
340 JobEventDetails::~JobEventDetails() { 342 JobEventDetails::~JobEventDetails() {
341 } 343 }
342 344
343 PrintedDocument* JobEventDetails::document() const { 345 PrintedDocument* JobEventDetails::document() const {
344 return document_; 346 return document_;
345 } 347 }
346 348
347 PrintedPage* JobEventDetails::page() const { 349 PrintedPage* JobEventDetails::page() const {
348 return page_; 350 return page_;
349 } 351 }
350 352
351 } // namespace printing 353 } // namespace printing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698