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

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

Issue 21057: Remove black magic and >100 lines. Unhook a lot of dead code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/printing/print_job.h ('k') | chrome/browser/printing/print_job_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/browser/printing/print_job_worker.h" 8 #include "chrome/browser/printing/print_job_worker.h"
9 #include "chrome/browser/printing/printed_document.h" 9 #include "chrome/browser/printing/printed_document.h"
10 #include "chrome/browser/printing/printed_page.h" 10 #include "chrome/browser/printing/printed_page.h"
11 #include "chrome/common/notification_service.h" 11 #include "chrome/common/notification_service.h"
12 12
13 #ifdef _MSC_VER 13 #ifdef _MSC_VER
14 #pragma warning(disable:4355) // 'this' : used in base member initializer list 14 #pragma warning(disable:4355) // 'this' : used in base member initializer list
15 #endif 15 #endif
16 16
17 using base::TimeDelta; 17 using base::TimeDelta;
18 18
19 namespace printing { 19 namespace printing {
20 20
21 PrintJob::PrintJob(PrintedPagesSource* source)
22 : ui_message_loop_(MessageLoop::current()),
23 worker_(new PrintJobWorker(this)),
24 source_(source),
25 is_job_pending_(false),
26 is_print_dialog_box_shown_(false),
27 is_canceling_(false) {
28 DCHECK(ui_message_loop_);
29 ui_message_loop_->AddDestructionObserver(this);
30 }
31
32 PrintJob::PrintJob() 21 PrintJob::PrintJob()
33 : ui_message_loop_(MessageLoop::current()), 22 : ui_message_loop_(MessageLoop::current()),
34 worker_(), 23 worker_(),
35 source_(NULL), 24 source_(NULL),
36 settings_(), 25 settings_(),
37 is_job_pending_(false), 26 is_job_pending_(false),
38 is_print_dialog_box_shown_(false), 27 is_print_dialog_box_shown_(false),
39 is_canceling_(false) { 28 is_canceling_(false) {
40 DCHECK(ui_message_loop_); 29 DCHECK(ui_message_loop_);
41 ui_message_loop_->AddDestructionObserver(this); 30 ui_message_loop_->AddDestructionObserver(this);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 break; 85 break;
97 } 86 }
98 default: { 87 default: {
99 break; 88 break;
100 } 89 }
101 } 90 }
102 } 91 }
103 92
104 void PrintJob::GetSettingsDone(const PrintSettings& new_settings, 93 void PrintJob::GetSettingsDone(const PrintSettings& new_settings,
105 PrintingContext::Result result) { 94 PrintingContext::Result result) {
106 DCHECK(!is_job_pending_); 95 NOTREACHED();
107
108 if (!source_ || result == PrintingContext::FAILED) {
109 // The source is gone, there's nothing to do.
110 Cancel();
111 return;
112 }
113
114 // Only create a new PrintedDocument if the settings have changed or if
115 // there was no printed document.
116 if (!document_.get() || !new_settings.Equals(settings_)) {
117 UpdatePrintedDocument(new PrintedDocument(new_settings, source_,
118 PrintSettings::NewCookie()));
119 }
120
121 JobEventDetails::Type type;
122 if (is_print_dialog_box_shown_) {
123 type = (result == PrintingContext::OK) ?
124 JobEventDetails::USER_INIT_DONE :
125 JobEventDetails::USER_INIT_CANCELED;
126 // Dialog box is not shown anymore.
127 is_print_dialog_box_shown_ = false;
128 } else {
129 DCHECK_EQ(result, PrintingContext::OK);
130 type = JobEventDetails::DEFAULT_INIT_DONE;
131 }
132 scoped_refptr<JobEventDetails> details(
133 new JobEventDetails(type, document_.get(), NULL));
134 NotificationService::current()->Notify(
135 NotificationType::PRINT_JOB_EVENT,
136 Source<PrintJob>(this),
137 Details<JobEventDetails>(details.get()));
138 } 96 }
139 97
140 PrintJobWorker* PrintJob::DetachWorker(PrintJobWorkerOwner* new_owner) { 98 PrintJobWorker* PrintJob::DetachWorker(PrintJobWorkerOwner* new_owner) {
141 NOTREACHED(); 99 NOTREACHED();
142 return NULL; 100 return NULL;
143 } 101 }
144 102
145 int PrintJob::cookie() const { 103 int PrintJob::cookie() const {
146 if (!document_.get()) 104 if (!document_.get())
147 // Always use an invalid cookie in this case. 105 // Always use an invalid cookie in this case.
148 return 0; 106 return 0;
149 return document_->cookie(); 107 return document_->cookie();
150 } 108 }
151 109
152 void PrintJob::WillDestroyCurrentMessageLoop() { 110 void PrintJob::WillDestroyCurrentMessageLoop() {
153 NOTREACHED(); 111 NOTREACHED();
154 } 112 }
155 113
156 void PrintJob::GetSettings(GetSettingsAskParam ask_user_for_settings,
157 HWND parent_window) {
158 DCHECK_EQ(ui_message_loop_, MessageLoop::current());
159 DCHECK(!is_job_pending_);
160 DCHECK(!is_print_dialog_box_shown_);
161 // Is not reentrant.
162 if (is_job_pending_)
163 return;
164
165 // Lazy create the worker thread. There is one worker thread per print job.
166 if (!worker_->message_loop()) {
167 if (!worker_->Start())
168 return;
169
170 // Don't re-register if we were already registered.
171 NotificationService::current()->AddObserver(
172 this, NotificationType::PRINT_JOB_EVENT, Source<PrintJob>(this));
173 }
174
175 int page_count = 0;
176 if (document_.get()) {
177 page_count = document_->page_count();
178 }
179
180 // Real work is done in PrintJobWorker::Init().
181 is_print_dialog_box_shown_ = ask_user_for_settings == ASK_USER;
182 worker_->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
183 worker_.get(), &PrintJobWorker::GetSettings, is_print_dialog_box_shown_,
184 parent_window, page_count));
185 }
186
187 void PrintJob::StartPrinting() { 114 void PrintJob::StartPrinting() {
188 DCHECK_EQ(ui_message_loop_, MessageLoop::current()); 115 DCHECK_EQ(ui_message_loop_, MessageLoop::current());
189 DCHECK(worker_->message_loop()); 116 DCHECK(worker_->message_loop());
190 DCHECK(!is_job_pending_); 117 DCHECK(!is_job_pending_);
191 DCHECK(!is_print_dialog_box_shown_); 118 DCHECK(!is_print_dialog_box_shown_);
192 if (!worker_->message_loop() || is_job_pending_) 119 if (!worker_->message_loop() || is_job_pending_)
193 return; 120 return;
194 121
195 // Real work is done in PrintJobWorker::StartPrinting(). 122 // Real work is done in PrintJobWorker::StartPrinting().
196 worker_->message_loop()->PostTask(FROM_HERE, NewRunnableMethod( 123 worker_->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 scoped_refptr<JobEventDetails> details( 178 scoped_refptr<JobEventDetails> details(
252 new JobEventDetails(JobEventDetails::FAILED, NULL, NULL)); 179 new JobEventDetails(JobEventDetails::FAILED, NULL, NULL));
253 NotificationService::current()->Notify( 180 NotificationService::current()->Notify(
254 NotificationType::PRINT_JOB_EVENT, 181 NotificationType::PRINT_JOB_EVENT,
255 Source<PrintJob>(this), 182 Source<PrintJob>(this),
256 Details<JobEventDetails>(details.get())); 183 Details<JobEventDetails>(details.get()));
257 Stop(); 184 Stop();
258 is_canceling_ = false; 185 is_canceling_ = false;
259 } 186 }
260 187
261 bool PrintJob::RequestMissingPages() {
262 DCHECK_EQ(ui_message_loop_, MessageLoop::current());
263 DCHECK(!is_print_dialog_box_shown_);
264 if (!is_job_pending_ || is_print_dialog_box_shown_)
265 return false;
266
267 MessageLoop* worker_loop = worker_.get() ? worker_->message_loop() : NULL;
268 if (!worker_loop)
269 return false;
270
271 worker_loop->PostTask(FROM_HERE, NewRunnableMethod(
272 worker_.get(), &PrintJobWorker::RequestMissingPages));
273 return true;
274 }
275
276 bool PrintJob::FlushJob(int timeout_ms) { 188 bool PrintJob::FlushJob(int timeout_ms) {
277 if (!RequestMissingPages())
278 return false;
279
280 // Make sure the object outlive this message loop. 189 // Make sure the object outlive this message loop.
281 scoped_refptr<PrintJob> handle(this); 190 scoped_refptr<PrintJob> handle(this);
282 191
283 // Stop() will eventually be called, which will get out of the inner message 192 // Stop() will eventually be called, which will get out of the inner message
284 // loop. But, don't take it for granted and set a timer in case something goes 193 // loop. But, don't take it for granted and set a timer in case something goes
285 // wrong. 194 // wrong.
286 base::OneShotTimer<MessageLoop> quit_task; 195 base::OneShotTimer<MessageLoop> quit_task;
287 if (timeout_ms) { 196 if (timeout_ms) {
288 quit_task.Start(TimeDelta::FromMilliseconds(timeout_ms), 197 quit_task.Start(TimeDelta::FromMilliseconds(timeout_ms),
289 MessageLoop::current(), &MessageLoop::Quit); 198 MessageLoop::current(), &MessageLoop::Quit);
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 PrintedDocument* JobEventDetails::document() const { 368 PrintedDocument* JobEventDetails::document() const {
460 return document_; 369 return document_;
461 } 370 }
462 371
463 PrintedPage* JobEventDetails::page() const { 372 PrintedPage* JobEventDetails::page() const {
464 return page_; 373 return page_;
465 } 374 }
466 375
467 } // namespace printing 376 } // namespace printing
468 377
OLDNEW
« no previous file with comments | « chrome/browser/printing/print_job.h ('k') | chrome/browser/printing/print_job_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698