| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |