Chromium Code Reviews

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

Issue 6027007: Printing: Get settings on the UI thread on all platforms. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
« no previous file with comments | « chrome/browser/printing/print_job_worker.h ('k') | no next file » | 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) 2010 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_worker.h" 5 #include "chrome/browser/printing/print_job_worker.h"
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "chrome/browser/browser_process.h" 8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/browser_thread.h" 9 #include "chrome/browser/browser_thread.h"
10 #include "chrome/browser/printing/print_job.h" 10 #include "chrome/browser/printing/print_job.h"
11 #include "chrome/common/notification_service.h" 11 #include "chrome/common/notification_service.h"
(...skipping 65 matching lines...)
77 bool use_overlays) { 77 bool use_overlays) {
78 DCHECK_EQ(message_loop(), MessageLoop::current()); 78 DCHECK_EQ(message_loop(), MessageLoop::current());
79 DCHECK_EQ(page_number_, PageNumber::npos()); 79 DCHECK_EQ(page_number_, PageNumber::npos());
80 80
81 // Recursive task processing is needed for the dialog in case it needs to be 81 // Recursive task processing is needed for the dialog in case it needs to be
82 // destroyed by a task. 82 // destroyed by a task.
83 MessageLoop::current()->SetNestableTasksAllowed(true); 83 MessageLoop::current()->SetNestableTasksAllowed(true);
84 printing_context_->set_use_overlays(use_overlays); 84 printing_context_->set_use_overlays(use_overlays);
85 85
86 if (ask_user_for_settings) { 86 if (ask_user_for_settings) {
87 #if defined(OS_POSIX)
88 BrowserThread::PostTask( 87 BrowserThread::PostTask(
89 BrowserThread::UI, FROM_HERE, 88 BrowserThread::UI, FROM_HERE,
90 NewRunnableMethod(this, &PrintJobWorker::GetSettingsWithUI, 89 NewRunnableMethod(this, &PrintJobWorker::GetSettingsWithUI,
91 parent_view, document_page_count, 90 parent_view, document_page_count,
92 has_selection)); 91 has_selection));
93 #else
94 printing_context_->AskUserForSettings(
95 parent_view,
96 document_page_count,
97 has_selection,
98 NewCallback(this, &PrintJobWorker::GetSettingsDone));
99 #endif // defined(OS_POSIX)
100 } else { 92 } else {
101 #if defined(OS_POSIX)
102 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 93 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
103 NewRunnableMethod(this, &PrintJobWorker::UseDefaultSettings)); 94 NewRunnableMethod(this, &PrintJobWorker::UseDefaultSettings));
104 #else
105 UseDefaultSettings();
106 #endif // defined(OS_POSIX)
107 } 95 }
108 } 96 }
109 97
110 void PrintJobWorker::GetSettingsDone(PrintingContext::Result result) { 98 void PrintJobWorker::GetSettingsDone(PrintingContext::Result result) {
111 // Most PrintingContext functions may start a message loop and process 99 // Most PrintingContext functions may start a message loop and process
112 // message recursively, so disable recursive task processing. 100 // message recursively, so disable recursive task processing.
113 MessageLoop::current()->SetNestableTasksAllowed(false); 101 MessageLoop::current()->SetNestableTasksAllowed(false);
114 102
115 // We can't use OnFailure() here since owner_ may not support notifications. 103 // We can't use OnFailure() here since owner_ may not support notifications.
116 104
117 // PrintJob will create the new PrintedDocument. 105 // PrintJob will create the new PrintedDocument.
118 owner_->message_loop()->PostTask(FROM_HERE, NewRunnableMethod( 106 owner_->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
119 owner_, 107 owner_,
120 &PrintJobWorkerOwner::GetSettingsDone, 108 &PrintJobWorkerOwner::GetSettingsDone,
121 printing_context_->settings(), 109 printing_context_->settings(),
122 result)); 110 result));
123 } 111 }
124 112
125 #if defined(OS_POSIX)
126 void PrintJobWorker::GetSettingsWithUI(gfx::NativeView parent_view, 113 void PrintJobWorker::GetSettingsWithUI(gfx::NativeView parent_view,
127 int document_page_count, 114 int document_page_count,
128 bool has_selection) { 115 bool has_selection) {
129 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 116 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
130 117
131 printing_context_->AskUserForSettings( 118 printing_context_->AskUserForSettings(
132 parent_view, 119 parent_view,
133 document_page_count, 120 document_page_count,
134 has_selection, 121 has_selection,
135 NewCallback(this, &PrintJobWorker::GetSettingsWithUIDone)); 122 NewCallback(this, &PrintJobWorker::GetSettingsWithUIDone));
136 } 123 }
137 124
138 void PrintJobWorker::GetSettingsWithUIDone(PrintingContext::Result result) { 125 void PrintJobWorker::GetSettingsWithUIDone(PrintingContext::Result result) {
139 message_loop()->PostTask(FROM_HERE, NewRunnableMethod( 126 message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
140 this, &PrintJobWorker::GetSettingsDone, result)); 127 this, &PrintJobWorker::GetSettingsDone, result));
141 } 128 }
142 #endif // defined(OS_POSIX)
143 129
144 void PrintJobWorker::UseDefaultSettings() { 130 void PrintJobWorker::UseDefaultSettings() {
145 PrintingContext::Result result = printing_context_->UseDefaultSettings(); 131 PrintingContext::Result result = printing_context_->UseDefaultSettings();
146 GetSettingsDone(result); 132 GetSettingsDone(result);
147 } 133 }
148 134
149 void PrintJobWorker::StartPrinting(PrintedDocument* new_document) { 135 void PrintJobWorker::StartPrinting(PrintedDocument* new_document) {
150 DCHECK_EQ(message_loop(), MessageLoop::current()); 136 DCHECK_EQ(message_loop(), MessageLoop::current());
151 DCHECK_EQ(page_number_, PageNumber::npos()); 137 DCHECK_EQ(page_number_, PageNumber::npos());
152 DCHECK_EQ(document_, new_document); 138 DCHECK_EQ(document_, new_document);
(...skipping 171 matching lines...)
324 printing::PrintJobWorker* obj) { 310 printing::PrintJobWorker* obj) {
325 DCHECK(!owner_.get()); 311 DCHECK(!owner_.get());
326 owner_ = obj->owner_; 312 owner_ = obj->owner_;
327 } 313 }
328 314
329 void RunnableMethodTraits<printing::PrintJobWorker>::ReleaseCallee( 315 void RunnableMethodTraits<printing::PrintJobWorker>::ReleaseCallee(
330 printing::PrintJobWorker* obj) { 316 printing::PrintJobWorker* obj) {
331 DCHECK_EQ(owner_, obj->owner_); 317 DCHECK_EQ(owner_, obj->owner_);
332 owner_ = NULL; 318 owner_ = NULL;
333 } 319 }
OLDNEW
« no previous file with comments | « chrome/browser/printing/print_job_worker.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine