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

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

Issue 7365003: Print Preview: Make preview generation event driven to eliminate synchronous messages. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: address comments Created 9 years, 5 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_preview_message_handler.h" 5 #include "chrome/browser/printing/print_preview_message_handler.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 printing::PrintPreviewTabController::GetInstance(); 56 printing::PrintPreviewTabController::GetInstance();
57 if (!tab_controller) 57 if (!tab_controller)
58 return NULL; 58 return NULL;
59 return tab_controller->GetPrintPreviewForTab(tab_contents()); 59 return tab_controller->GetPrintPreviewForTab(tab_contents());
60 } 60 }
61 61
62 void PrintPreviewMessageHandler::OnRequestPrintPreview() { 62 void PrintPreviewMessageHandler::OnRequestPrintPreview() {
63 PrintPreviewTabController::PrintPreview(tab_contents()); 63 PrintPreviewTabController::PrintPreview(tab_contents());
64 } 64 }
65 65
66 void PrintPreviewMessageHandler::OnDidGetPreviewPageCount(int page_count) { 66 void PrintPreviewMessageHandler::OnDidGetPreviewPageCount(int document_cookie,
67 int page_count) {
67 if (page_count <= 0) 68 if (page_count <= 0)
68 return; 69 return;
69 TabContents* print_preview_tab = GetPrintPreviewTab(); 70 TabContents* print_preview_tab = GetPrintPreviewTab();
70 if (!print_preview_tab) 71 if (!print_preview_tab)
71 return; 72 return;
72 73
73 PrintPreviewUI* print_preview_ui = 74 PrintPreviewUI* print_preview_ui =
74 static_cast<PrintPreviewUI*>(print_preview_tab->web_ui()); 75 static_cast<PrintPreviewUI*>(print_preview_tab->web_ui());
75 print_preview_ui->OnDidGetPreviewPageCount(page_count); 76 print_preview_ui->OnDidGetPreviewPageCount(document_cookie, page_count);
76 } 77 }
77 78
78 void PrintPreviewMessageHandler::OnDidPreviewPage(int page_number, 79 void PrintPreviewMessageHandler::OnDidPreviewPage(int page_number) {
79 bool* cancel) { 80 RenderViewHost* rvh = tab_contents()->render_view_host();
80 TabContents* print_preview_tab = GetPrintPreviewTab(); 81 TabContents* print_preview_tab = GetPrintPreviewTab();
81 if (!print_preview_tab) { 82 if (!print_preview_tab) {
82 // Can't find print preview tab means we should cancel. 83 // Can't find print preview tab means we should abort.
83 *cancel = true; 84 rvh->Send(new PrintMsg_AbortPreview(rvh->routing_id()));
84 return; 85 return;
85 } 86 }
86 87
87 PrintPreviewUI* print_preview_ui = 88 PrintPreviewUI* print_preview_ui =
88 static_cast<PrintPreviewUI*>(print_preview_tab->web_ui()); 89 static_cast<PrintPreviewUI*>(print_preview_tab->web_ui());
89 bool has_pending = print_preview_ui->HasPendingRequests(); 90 bool has_pending = print_preview_ui->HasPendingRequests();
90 if (!has_pending && page_number >= 0) 91 if (has_pending) {
92 // Cancel. Next print preview request will cancel the current one.
93 // Just do the required maintainance work here.
94 StopWorker(print_preview_ui->document_cookie());
95 print_preview_ui->OnPrintPreviewCancelled();
96 return;
97 }
98
99 // Continue
100 if (page_number >= 0)
91 print_preview_ui->OnDidPreviewPage(page_number); 101 print_preview_ui->OnDidPreviewPage(page_number);
92 *cancel = has_pending; 102 rvh->Send(new PrintMsg_ContinuePreview(rvh->routing_id()));
93 } 103 }
94 104
95 void PrintPreviewMessageHandler::OnPagesReadyForPreview( 105 void PrintPreviewMessageHandler::OnPagesReadyForPreview(
96 const PrintHostMsg_DidPreviewDocument_Params& params) { 106 const PrintHostMsg_DidPreviewDocument_Params& params) {
97 // Always need to stop the worker and send PrintMsg_PrintingDone. 107 // Always need to stop the worker and send PrintMsg_PrintingDone.
98 StopWorker(params.document_cookie); 108 StopWorker(params.document_cookie);
99 109
100 RenderViewHost* rvh = tab_contents()->render_view_host(); 110 RenderViewHost* rvh = tab_contents()->render_view_host();
101 rvh->Send(new PrintMsg_PrintingDone(rvh->routing_id(), true)); 111 rvh->Send(new PrintMsg_PrintingDone(rvh->routing_id(), true));
102 112
103 // Get the print preview tab. 113 // Get the print preview tab.
104 TabContents* print_preview_tab = GetPrintPreviewTab(); 114 TabContents* print_preview_tab = GetPrintPreviewTab();
105 // User might have closed it already. 115 // User might have closed it already.
106 if (!print_preview_tab) 116 if (!print_preview_tab)
107 return; 117 return;
108 118
109 PrintPreviewUI* print_preview_ui = 119 PrintPreviewUI* print_preview_ui =
110 static_cast<PrintPreviewUI*>(print_preview_tab->web_ui()); 120 static_cast<PrintPreviewUI*>(print_preview_tab->web_ui());
111 121
112 TabContentsWrapper* wrapper = 122 TabContentsWrapper* wrapper =
113 TabContentsWrapper::GetCurrentWrapperForContents(print_preview_tab); 123 TabContentsWrapper::GetCurrentWrapperForContents(print_preview_tab);
114 124
115 if (params.reuse_existing_data) { 125 if (params.reuse_existing_data) {
116 // Need to match normal rendering where we are expected to send this. 126 // Need to match normal rendering where we are expected to send this.
117 print_preview_ui->OnDidGetPreviewPageCount(params.expected_pages_count); 127 print_preview_ui->OnDidGetPreviewPageCount(params.document_cookie,
128 params.expected_pages_count);
118 129
119 print_preview_ui->OnPreviewDataIsAvailable( 130 print_preview_ui->OnPreviewDataIsAvailable(
120 params.expected_pages_count, 131 params.expected_pages_count,
121 wrapper->print_view_manager()->RenderSourceName(), 132 wrapper->print_view_manager()->RenderSourceName(),
122 params.modifiable, 133 params.modifiable,
123 params.preview_request_id); 134 params.preview_request_id);
124 return; 135 return;
125 } 136 }
126 137
127 base::SharedMemory* shared_buf = 138 base::SharedMemory* shared_buf =
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 HasTabContents(wrapper)) { 179 HasTabContents(wrapper)) {
169 // Preview tab was hidden to serve the print request. 180 // Preview tab was hidden to serve the print request.
170 delete wrapper; 181 delete wrapper;
171 } else { 182 } else {
172 PrintPreviewUI* print_preview_ui = 183 PrintPreviewUI* print_preview_ui =
173 static_cast<PrintPreviewUI*>(print_preview_tab->web_ui()); 184 static_cast<PrintPreviewUI*>(print_preview_tab->web_ui());
174 print_preview_ui->OnPrintPreviewFailed(); 185 print_preview_ui->OnPrintPreviewFailed();
175 } 186 }
176 } 187 }
177 188
178 void PrintPreviewMessageHandler::OnPrintPreviewCancelled(int document_cookie) {
179 // Always need to stop the worker.
180 StopWorker(document_cookie);
181
182 TabContents* print_preview_tab = GetPrintPreviewTab();
183 if (!print_preview_tab)
184 return;
185
186 PrintPreviewUI* print_preview_ui =
187 static_cast<PrintPreviewUI*>(print_preview_tab->web_ui());
188 print_preview_ui->OnPrintPreviewCancelled();
189 }
190
191 bool PrintPreviewMessageHandler::OnMessageReceived( 189 bool PrintPreviewMessageHandler::OnMessageReceived(
192 const IPC::Message& message) { 190 const IPC::Message& message) {
193 bool handled = true; 191 bool handled = true;
194 IPC_BEGIN_MESSAGE_MAP(PrintPreviewMessageHandler, message) 192 IPC_BEGIN_MESSAGE_MAP(PrintPreviewMessageHandler, message)
195 IPC_MESSAGE_HANDLER(PrintHostMsg_RequestPrintPreview, 193 IPC_MESSAGE_HANDLER(PrintHostMsg_RequestPrintPreview,
196 OnRequestPrintPreview) 194 OnRequestPrintPreview)
197 IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetPreviewPageCount, 195 IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetPreviewPageCount,
198 OnDidGetPreviewPageCount) 196 OnDidGetPreviewPageCount)
199 IPC_MESSAGE_HANDLER(PrintHostMsg_DidPreviewPage, 197 IPC_MESSAGE_HANDLER(PrintHostMsg_DidPreviewPage,
200 OnDidPreviewPage) 198 OnDidPreviewPage)
201 IPC_MESSAGE_HANDLER(PrintHostMsg_PagesReadyForPreview, 199 IPC_MESSAGE_HANDLER(PrintHostMsg_PagesReadyForPreview,
202 OnPagesReadyForPreview) 200 OnPagesReadyForPreview)
203 IPC_MESSAGE_HANDLER(PrintHostMsg_PrintPreviewFailed, 201 IPC_MESSAGE_HANDLER(PrintHostMsg_PrintPreviewFailed,
204 OnPrintPreviewFailed) 202 OnPrintPreviewFailed)
205 IPC_MESSAGE_HANDLER(PrintHostMsg_PrintPreviewCancelled,
206 OnPrintPreviewCancelled)
207 IPC_MESSAGE_UNHANDLED(handled = false) 203 IPC_MESSAGE_UNHANDLED(handled = false)
208 IPC_END_MESSAGE_MAP() 204 IPC_END_MESSAGE_MAP()
209 return handled; 205 return handled;
210 } 206 }
211 207
212 void PrintPreviewMessageHandler::DidStartLoading() { 208 void PrintPreviewMessageHandler::DidStartLoading() {
213 if (tab_contents()->delegate() && 209 if (tab_contents()->delegate() &&
214 printing::PrintPreviewTabController::IsPrintPreviewTab(tab_contents())) { 210 printing::PrintPreviewTabController::IsPrintPreviewTab(tab_contents())) {
215 tab_contents()->SetContentRestrictions(CONTENT_RESTRICTION_PRINT); 211 tab_contents()->SetContentRestrictions(CONTENT_RESTRICTION_PRINT);
216 } 212 }
217 } 213 }
218 214
219 } // namespace printing 215 } // namespace printing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698