| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/printing_message_filter.h" | 5 #include "chrome/browser/printing/printing_message_filter.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "build/build_config.h" | 12 #include "build/build_config.h" |
| 13 #include "chrome/browser/browser_process.h" | 13 #include "chrome/browser/browser_process.h" |
| 14 #include "chrome/browser/printing/print_job_manager.h" | 14 #include "chrome/browser/printing/print_job_manager.h" |
| 15 #include "chrome/browser/printing/printer_query.h" | 15 #include "chrome/browser/printing/printer_query.h" |
| 16 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
| 17 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
| 18 #include "components/printing/browser/print_manager_utils.h" | 18 #include "components/printing/browser/print_manager_utils.h" |
| 19 #include "components/printing/common/print_messages.h" | 19 #include "components/printing/common/print_messages.h" |
| 20 #include "content/public/browser/browser_thread.h" | 20 #include "content/public/browser/browser_thread.h" |
| 21 #include "content/public/browser/render_view_host.h" | 21 #include "content/public/browser/render_frame_host.h" |
| 22 #include "content/public/browser/web_contents.h" | 22 #include "content/public/browser/web_contents.h" |
| 23 #include "content/public/common/child_process_host.h" | 23 #include "content/public/common/child_process_host.h" |
| 24 #include "printing/features/features.h" | 24 #include "printing/features/features.h" |
| 25 | 25 |
| 26 #if BUILDFLAG(ENABLE_PRINT_PREVIEW) | 26 #if BUILDFLAG(ENABLE_PRINT_PREVIEW) |
| 27 #include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" | 27 #include "chrome/browser/ui/webui/print_preview/print_preview_ui.h" |
| 28 #endif | 28 #endif |
| 29 | 29 |
| 30 #if defined(OS_ANDROID) | 30 #if defined(OS_ANDROID) |
| 31 #include "base/file_descriptor_posix.h" | 31 #include "base/file_descriptor_posix.h" |
| 32 #include "base/strings/string_number_conversions.h" | 32 #include "base/strings/string_number_conversions.h" |
| 33 #include "chrome/browser/printing/print_view_manager_basic.h" | 33 #include "chrome/browser/printing/print_view_manager_basic.h" |
| 34 #endif | 34 #endif |
| 35 | 35 |
| 36 using content::BrowserThread; | 36 using content::BrowserThread; |
| 37 | 37 |
| 38 namespace printing { | 38 namespace printing { |
| 39 | 39 |
| 40 namespace { | 40 namespace { |
| 41 | 41 |
| 42 #if defined(OS_ANDROID) | 42 #if defined(OS_ANDROID) |
| 43 content::WebContents* GetWebContentsForRenderView(int render_process_id, | 43 content::WebContents* GetWebContentsForRenderFrame(int render_process_id, |
| 44 int render_view_id) { | 44 int render_frame_id) { |
| 45 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 45 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 46 content::RenderViewHost* view = content::RenderViewHost::FromID( | 46 content::RenderFrameHost* frame = |
| 47 render_process_id, render_view_id); | 47 content::RenderFrameHost::FromID(render_process_id, render_frame_id); |
| 48 return view ? content::WebContents::FromRenderViewHost(view) : nullptr; | 48 return frame ? content::WebContents::FromRenderFrameHost(frame) : nullptr; |
| 49 } | 49 } |
| 50 | 50 |
| 51 PrintViewManagerBasic* GetPrintManager(int render_process_id, | 51 PrintViewManagerBasic* GetPrintManager(int render_process_id, |
| 52 int render_view_id) { | 52 int render_frame_id) { |
| 53 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 53 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 54 content::WebContents* web_contents = | 54 content::WebContents* web_contents = |
| 55 GetWebContentsForRenderView(render_process_id, render_view_id); | 55 GetWebContentsForRenderFrame(render_process_id, render_frame_id); |
| 56 return web_contents ? PrintViewManagerBasic::FromWebContents(web_contents) | 56 return web_contents ? PrintViewManagerBasic::FromWebContents(web_contents) |
| 57 : nullptr; | 57 : nullptr; |
| 58 } | 58 } |
| 59 #endif | 59 #endif |
| 60 | 60 |
| 61 } // namespace | 61 } // namespace |
| 62 | 62 |
| 63 PrintingMessageFilter::PrintingMessageFilter(int render_process_id, | 63 PrintingMessageFilter::PrintingMessageFilter(int render_process_id, |
| 64 Profile* profile) | 64 Profile* profile) |
| 65 : BrowserMessageFilter(PrintMsgStart), | 65 : BrowserMessageFilter(PrintMsgStart), |
| (...skipping 21 matching lines...) Expand all Loading... |
| 87 | 87 |
| 88 bool PrintingMessageFilter::OnMessageReceived(const IPC::Message& message) { | 88 bool PrintingMessageFilter::OnMessageReceived(const IPC::Message& message) { |
| 89 bool handled = true; | 89 bool handled = true; |
| 90 IPC_BEGIN_MESSAGE_MAP(PrintingMessageFilter, message) | 90 IPC_BEGIN_MESSAGE_MAP(PrintingMessageFilter, message) |
| 91 #if defined(OS_ANDROID) | 91 #if defined(OS_ANDROID) |
| 92 IPC_MESSAGE_HANDLER(PrintHostMsg_AllocateTempFileForPrinting, | 92 IPC_MESSAGE_HANDLER(PrintHostMsg_AllocateTempFileForPrinting, |
| 93 OnAllocateTempFileForPrinting) | 93 OnAllocateTempFileForPrinting) |
| 94 IPC_MESSAGE_HANDLER(PrintHostMsg_TempFileForPrintingWritten, | 94 IPC_MESSAGE_HANDLER(PrintHostMsg_TempFileForPrintingWritten, |
| 95 OnTempFileForPrintingWritten) | 95 OnTempFileForPrintingWritten) |
| 96 #endif | 96 #endif |
| 97 IPC_MESSAGE_HANDLER(PrintHostMsg_IsPrintingEnabled, OnIsPrintingEnabled) | |
| 98 IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_GetDefaultPrintSettings, | 97 IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_GetDefaultPrintSettings, |
| 99 OnGetDefaultPrintSettings) | 98 OnGetDefaultPrintSettings) |
| 100 IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_ScriptedPrint, OnScriptedPrint) | 99 IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_ScriptedPrint, OnScriptedPrint) |
| 101 IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_UpdatePrintSettings, | 100 IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_UpdatePrintSettings, |
| 102 OnUpdatePrintSettings) | 101 OnUpdatePrintSettings) |
| 103 #if BUILDFLAG(ENABLE_PRINT_PREVIEW) | 102 #if BUILDFLAG(ENABLE_PRINT_PREVIEW) |
| 104 IPC_MESSAGE_HANDLER(PrintHostMsg_CheckForCancel, OnCheckForCancel) | 103 IPC_MESSAGE_HANDLER(PrintHostMsg_CheckForCancel, OnCheckForCancel) |
| 105 #endif | 104 #endif |
| 106 IPC_MESSAGE_UNHANDLED(handled = false) | 105 IPC_MESSAGE_UNHANDLED(handled = false) |
| 107 IPC_END_MESSAGE_MAP() | 106 IPC_END_MESSAGE_MAP() |
| 108 return handled; | 107 return handled; |
| 109 } | 108 } |
| 110 | 109 |
| 111 #if defined(OS_ANDROID) | 110 #if defined(OS_ANDROID) |
| 112 void PrintingMessageFilter::OnAllocateTempFileForPrinting( | 111 void PrintingMessageFilter::OnAllocateTempFileForPrinting( |
| 113 int render_view_id, | 112 int render_frame_id, |
| 114 base::FileDescriptor* temp_file_fd, | 113 base::FileDescriptor* temp_file_fd, |
| 115 int* sequence_number) { | 114 int* sequence_number) { |
| 116 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 115 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 117 PrintViewManagerBasic* print_view_manager = | 116 PrintViewManagerBasic* print_view_manager = |
| 118 GetPrintManager(render_process_id_, render_view_id); | 117 GetPrintManager(render_process_id_, render_frame_id); |
| 119 if (!print_view_manager) | 118 if (!print_view_manager) |
| 120 return; | 119 return; |
| 120 |
| 121 // The file descriptor is originally created in & passed from the Android | 121 // The file descriptor is originally created in & passed from the Android |
| 122 // side, and it will handle the closing. | 122 // side, and it will handle the closing. |
| 123 temp_file_fd->fd = print_view_manager->file_descriptor().fd; | 123 temp_file_fd->fd = print_view_manager->file_descriptor().fd; |
| 124 temp_file_fd->auto_close = false; | 124 temp_file_fd->auto_close = false; |
| 125 } | 125 } |
| 126 | 126 |
| 127 void PrintingMessageFilter::OnTempFileForPrintingWritten(int render_view_id, | 127 void PrintingMessageFilter::OnTempFileForPrintingWritten(int render_frame_id, |
| 128 int sequence_number) { | 128 int sequence_number) { |
| 129 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 129 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 130 PrintViewManagerBasic* print_view_manager = | 130 PrintViewManagerBasic* print_view_manager = |
| 131 GetPrintManager(render_process_id_, render_view_id); | 131 GetPrintManager(render_process_id_, render_frame_id); |
| 132 if (print_view_manager) | 132 if (print_view_manager) |
| 133 print_view_manager->PdfWritingDone(true); | 133 print_view_manager->PdfWritingDone(true); |
| 134 } | 134 } |
| 135 #endif // defined(OS_ANDROID) | 135 #endif // defined(OS_ANDROID) |
| 136 | 136 |
| 137 void PrintingMessageFilter::OnIsPrintingEnabled(bool* is_enabled) { | |
| 138 DCHECK_CURRENTLY_ON(BrowserThread::IO); | |
| 139 *is_enabled = is_printing_enabled_->GetValue(); | |
| 140 } | |
| 141 | |
| 142 void PrintingMessageFilter::OnGetDefaultPrintSettings(IPC::Message* reply_msg) { | 137 void PrintingMessageFilter::OnGetDefaultPrintSettings(IPC::Message* reply_msg) { |
| 143 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 138 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 144 scoped_refptr<PrinterQuery> printer_query; | 139 scoped_refptr<PrinterQuery> printer_query; |
| 145 if (!is_printing_enabled_->GetValue()) { | 140 if (!is_printing_enabled_->GetValue()) { |
| 146 // Reply with NULL query. | 141 // Reply with NULL query. |
| 147 OnGetDefaultPrintSettingsReply(printer_query, reply_msg); | 142 OnGetDefaultPrintSettingsReply(printer_query, reply_msg); |
| 148 return; | 143 return; |
| 149 } | 144 } |
| 150 printer_query = queue_->PopPrinterQuery(0); | 145 printer_query = queue_->PopPrinterQuery(0); |
| 151 if (!printer_query.get()) { | 146 if (!printer_query.get()) { |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 routing_id, file_descriptor)); | 228 routing_id, file_descriptor)); |
| 234 } | 229 } |
| 235 #endif | 230 #endif |
| 236 queue_->QueuePrinterQuery(printer_query.get()); | 231 queue_->QueuePrinterQuery(printer_query.get()); |
| 237 } else { | 232 } else { |
| 238 printer_query->StopWorker(); | 233 printer_query->StopWorker(); |
| 239 } | 234 } |
| 240 } | 235 } |
| 241 | 236 |
| 242 #if defined(OS_ANDROID) | 237 #if defined(OS_ANDROID) |
| 243 void PrintingMessageFilter::UpdateFileDescriptor(int render_view_id, int fd) { | 238 void PrintingMessageFilter::UpdateFileDescriptor(int render_frame_id, int fd) { |
| 244 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 239 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 245 PrintViewManagerBasic* print_view_manager = | 240 PrintViewManagerBasic* print_view_manager = |
| 246 GetPrintManager(render_process_id_, render_view_id); | 241 GetPrintManager(render_process_id_, render_frame_id); |
| 247 if (print_view_manager) | 242 if (print_view_manager) |
| 248 print_view_manager->set_file_descriptor(base::FileDescriptor(fd, false)); | 243 print_view_manager->set_file_descriptor(base::FileDescriptor(fd, false)); |
| 249 } | 244 } |
| 250 #endif | 245 #endif |
| 251 | 246 |
| 252 void PrintingMessageFilter::OnUpdatePrintSettings( | 247 void PrintingMessageFilter::OnUpdatePrintSettings( |
| 253 int document_cookie, const base::DictionaryValue& job_settings, | 248 int document_cookie, const base::DictionaryValue& job_settings, |
| 254 IPC::Message* reply_msg) { | 249 IPC::Message* reply_msg) { |
| 255 std::unique_ptr<base::DictionaryValue> new_settings(job_settings.DeepCopy()); | 250 std::unique_ptr<base::DictionaryValue> new_settings(job_settings.DeepCopy()); |
| 256 | 251 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 311 void PrintingMessageFilter::OnCheckForCancel(int32_t preview_ui_id, | 306 void PrintingMessageFilter::OnCheckForCancel(int32_t preview_ui_id, |
| 312 int preview_request_id, | 307 int preview_request_id, |
| 313 bool* cancel) { | 308 bool* cancel) { |
| 314 PrintPreviewUI::GetCurrentPrintPreviewStatus(preview_ui_id, | 309 PrintPreviewUI::GetCurrentPrintPreviewStatus(preview_ui_id, |
| 315 preview_request_id, | 310 preview_request_id, |
| 316 cancel); | 311 cancel); |
| 317 } | 312 } |
| 318 #endif | 313 #endif |
| 319 | 314 |
| 320 } // namespace printing | 315 } // namespace printing |
| OLD | NEW |