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

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

Issue 3384035: Printing: Call PrintingContext::AskUserForSettings() on the UI thread for Linux (Closed)
Patch Set: Created 10 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
« 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) 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_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/chrome_thread.h" 8 #include "chrome/browser/chrome_thread.h"
9 #include "chrome/browser/printing/print_job.h" 9 #include "chrome/browser/printing/print_job.h"
10 #include "chrome/common/notification_service.h" 10 #include "chrome/common/notification_service.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 bool use_overlays) { 71 bool use_overlays) {
72 DCHECK_EQ(message_loop(), MessageLoop::current()); 72 DCHECK_EQ(message_loop(), MessageLoop::current());
73 DCHECK_EQ(page_number_, PageNumber::npos()); 73 DCHECK_EQ(page_number_, PageNumber::npos());
74 74
75 // Recursive task processing is needed for the dialog in case it needs to be 75 // Recursive task processing is needed for the dialog in case it needs to be
76 // destroyed by a task. 76 // destroyed by a task.
77 MessageLoop::current()->SetNestableTasksAllowed(true); 77 MessageLoop::current()->SetNestableTasksAllowed(true);
78 printing_context_.SetUseOverlays(use_overlays); 78 printing_context_.SetUseOverlays(use_overlays);
79 79
80 if (ask_user_for_settings) { 80 if (ask_user_for_settings) {
81 #if defined(OS_MACOSX) 81 #if defined(OS_MACOSX) || defined(USE_X11)
82 ChromeThread::PostTask( 82 ChromeThread::PostTask(
83 ChromeThread::UI, FROM_HERE, 83 ChromeThread::UI, FROM_HERE,
84 NewRunnableMethod(this, &PrintJobWorker::GetSettingsWithUI, 84 NewRunnableMethod(this, &PrintJobWorker::GetSettingsWithUI,
85 parent_view, document_page_count, 85 parent_view, document_page_count,
86 has_selection)); 86 has_selection));
87 #else 87 #else
88 printing_context_.AskUserForSettings( 88 printing_context_.AskUserForSettings(
89 parent_view, 89 parent_view,
90 document_page_count, 90 document_page_count,
91 has_selection, 91 has_selection,
92 NewCallback(this, &PrintJobWorker::GetSettingsDone)); 92 NewCallback(this, &PrintJobWorker::GetSettingsDone));
93 #endif 93 #endif // defined(OS_MACOSX) || defined(USE_X11)
94 } else { 94 } else {
95 PrintingContext::Result result = printing_context_.UseDefaultSettings(); 95 PrintingContext::Result result = printing_context_.UseDefaultSettings();
96 GetSettingsDone(result); 96 GetSettingsDone(result);
97 } 97 }
98 } 98 }
99 99
100 void PrintJobWorker::GetSettingsDone(PrintingContext::Result result) { 100 void PrintJobWorker::GetSettingsDone(PrintingContext::Result result) {
101 // Most PrintingContext functions may start a message loop and process 101 // Most PrintingContext functions may start a message loop and process
102 // message recursively, so disable recursive task processing. 102 // message recursively, so disable recursive task processing.
103 MessageLoop::current()->SetNestableTasksAllowed(false); 103 MessageLoop::current()->SetNestableTasksAllowed(false);
104 104
105 // We can't use OnFailure() here since owner_ may not support notifications. 105 // We can't use OnFailure() here since owner_ may not support notifications.
106 106
107 // PrintJob will create the new PrintedDocument. 107 // PrintJob will create the new PrintedDocument.
108 owner_->message_loop()->PostTask(FROM_HERE, NewRunnableMethod( 108 owner_->message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
109 owner_, 109 owner_,
110 &PrintJobWorkerOwner::GetSettingsDone, 110 &PrintJobWorkerOwner::GetSettingsDone,
111 printing_context_.settings(), 111 printing_context_.settings(),
112 result)); 112 result));
113 } 113 }
114 114
115 #if defined(OS_MACOSX) 115 #if defined(OS_MACOSX) || defined(USE_X11)
116 void PrintJobWorker::GetSettingsWithUI(gfx::NativeView parent_view, 116 void PrintJobWorker::GetSettingsWithUI(gfx::NativeView parent_view,
117 int document_page_count, 117 int document_page_count,
118 bool has_selection) { 118 bool has_selection) {
119 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI)); 119 DCHECK(ChromeThread::CurrentlyOn(ChromeThread::UI));
120 120
121 printing_context_.AskUserForSettings( 121 printing_context_.AskUserForSettings(
122 parent_view, 122 parent_view,
123 document_page_count, 123 document_page_count,
124 has_selection, 124 has_selection,
125 NewCallback(this, &PrintJobWorker::GetSettingsWithUIDone)); 125 NewCallback(this, &PrintJobWorker::GetSettingsWithUIDone));
126 } 126 }
127 127
128 void PrintJobWorker::GetSettingsWithUIDone(PrintingContext::Result result) { 128 void PrintJobWorker::GetSettingsWithUIDone(PrintingContext::Result result) {
129 message_loop()->PostTask(FROM_HERE, NewRunnableMethod( 129 message_loop()->PostTask(FROM_HERE, NewRunnableMethod(
130 this, &PrintJobWorker::GetSettingsDone, result)); 130 this, &PrintJobWorker::GetSettingsDone, result));
131 } 131 }
132 #endif 132 #endif // defined(OS_MACOSX) || defined(USE_X11)
133 133
134 void PrintJobWorker::StartPrinting(PrintedDocument* new_document) { 134 void PrintJobWorker::StartPrinting(PrintedDocument* new_document) {
135 DCHECK_EQ(message_loop(), MessageLoop::current()); 135 DCHECK_EQ(message_loop(), MessageLoop::current());
136 DCHECK_EQ(page_number_, PageNumber::npos()); 136 DCHECK_EQ(page_number_, PageNumber::npos());
137 DCHECK_EQ(document_, new_document); 137 DCHECK_EQ(document_, new_document);
138 DCHECK(document_.get()); 138 DCHECK(document_.get());
139 DCHECK(new_document->settings().Equals(printing_context_.settings())); 139 DCHECK(new_document->settings().Equals(printing_context_.settings()));
140 #if !defined(OS_MACOSX) 140 #if !defined(OS_MACOSX)
141 DCHECK(printing_context_.context()); 141 DCHECK(printing_context_.context());
142 #endif 142 #endif
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 printing::PrintJobWorker* obj) { 321 printing::PrintJobWorker* obj) {
322 DCHECK(!owner_.get()); 322 DCHECK(!owner_.get());
323 owner_ = obj->owner_; 323 owner_ = obj->owner_;
324 } 324 }
325 325
326 void RunnableMethodTraits<printing::PrintJobWorker>::ReleaseCallee( 326 void RunnableMethodTraits<printing::PrintJobWorker>::ReleaseCallee(
327 printing::PrintJobWorker* obj) { 327 printing::PrintJobWorker* obj) {
328 DCHECK_EQ(owner_, obj->owner_); 328 DCHECK_EQ(owner_, obj->owner_);
329 owner_ = NULL; 329 owner_ = NULL;
330 } 330 }
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
This is Rietveld 408576698