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

Side by Side Diff: chrome/browser/renderer_host/resource_message_filter.cc

Issue 276004: Wire up printing on the Mac (Closed)
Patch Set: Created 11 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
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/renderer_host/resource_message_filter.h" 5 #include "chrome/browser/renderer_host/resource_message_filter.h"
6 6
7 #include "app/clipboard/clipboard.h" 7 #include "app/clipboard/clipboard.h"
8 #include "app/gfx/native_widget_types.h" 8 #include "app/gfx/native_widget_types.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/histogram.h" 10 #include "base/histogram.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "chrome/common/worker_messages.h" 48 #include "chrome/common/worker_messages.h"
49 #include "net/base/mime_util.h" 49 #include "net/base/mime_util.h"
50 #include "net/base/load_flags.h" 50 #include "net/base/load_flags.h"
51 #include "net/http/http_cache.h" 51 #include "net/http/http_cache.h"
52 #include "net/http/http_transaction_factory.h" 52 #include "net/http/http_transaction_factory.h"
53 #include "net/url_request/url_request_context.h" 53 #include "net/url_request/url_request_context.h"
54 #include "webkit/glue/plugins/plugin_list.h" 54 #include "webkit/glue/plugins/plugin_list.h"
55 #include "webkit/glue/webkit_glue.h" 55 #include "webkit/glue/webkit_glue.h"
56 #include "webkit/glue/webplugin.h" 56 #include "webkit/glue/webplugin.h"
57 57
58 #if defined(OS_WIN) 58 #if defined(OS_WIN) || defined(OS_MACOSX)
59 #include "chrome/browser/printing/print_job_manager.h" 59 #include "chrome/browser/printing/print_job_manager.h"
60 #include "chrome/browser/printing/printer_query.h" 60 #include "chrome/browser/printing/printer_query.h"
61 #elif defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_FREEBSD) 61 #elif defined(OS_LINUX) || defined(OS_FREEBSD)
62 // TODO(port) remove this. 62 // TODO(port) remove this.
63 #include "chrome/common/temp_scaffolding_stubs.h" 63 #include "chrome/common/temp_scaffolding_stubs.h"
64 #endif 64 #endif
65 65
66 using WebKit::WebCache; 66 using WebKit::WebCache;
67 67
68 namespace { 68 namespace {
69 69
70 // Context menus are somewhat complicated. We need to intercept them here on 70 // Context menus are somewhat complicated. We need to intercept them here on
71 // the I/O thread to add any spelling suggestions to them. After that's done, 71 // the I/O thread to add any spelling suggestions to them. After that's done,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 g_browser_process->clipboard()->WriteObjects(*objects_.get()); 111 g_browser_process->clipboard()->WriteObjects(*objects_.get());
112 } 112 }
113 113
114 private: 114 private:
115 scoped_ptr<Clipboard::ObjectMap> objects_; 115 scoped_ptr<Clipboard::ObjectMap> objects_;
116 }; 116 };
117 117
118 void RenderParamsFromPrintSettings(const printing::PrintSettings& settings, 118 void RenderParamsFromPrintSettings(const printing::PrintSettings& settings,
119 ViewMsg_Print_Params* params) { 119 ViewMsg_Print_Params* params) {
120 DCHECK(params); 120 DCHECK(params);
121 #if defined(OS_WIN) 121 #if defined(OS_WIN) || defined(OS_MACOSX)
122 params->printable_size.SetSize( 122 params->printable_size.SetSize(
123 settings.page_setup_pixels().content_area().width(), 123 settings.page_setup_pixels().content_area().width(),
124 settings.page_setup_pixels().content_area().height()); 124 settings.page_setup_pixels().content_area().height());
125 params->dpi = settings.dpi(); 125 params->dpi = settings.dpi();
126 // Currently hardcoded at 1.25. See PrintSettings' constructor. 126 // Currently hardcoded at 1.25. See PrintSettings' constructor.
127 params->min_shrink = settings.min_shrink; 127 params->min_shrink = settings.min_shrink;
128 // Currently hardcoded at 2.0. See PrintSettings' constructor. 128 // Currently hardcoded at 2.0. See PrintSettings' constructor.
129 params->max_shrink = settings.max_shrink; 129 params->max_shrink = settings.max_shrink;
130 // Currently hardcoded at 72dpi. See PrintSettings' constructor. 130 // Currently hardcoded at 72dpi. See PrintSettings' constructor.
131 params->desired_dpi = settings.desired_dpi; 131 params->desired_dpi = settings.desired_dpi;
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 IPC_MESSAGE_HANDLER(ViewHostMsg_GetCPBrowsingContext, 350 IPC_MESSAGE_HANDLER(ViewHostMsg_GetCPBrowsingContext,
351 OnGetCPBrowsingContext) 351 OnGetCPBrowsingContext)
352 #if defined(OS_WIN) 352 #if defined(OS_WIN)
353 IPC_MESSAGE_HANDLER(ViewHostMsg_DuplicateSection, OnDuplicateSection) 353 IPC_MESSAGE_HANDLER(ViewHostMsg_DuplicateSection, OnDuplicateSection)
354 #endif 354 #endif
355 #if defined(OS_LINUX) 355 #if defined(OS_LINUX)
356 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_AllocateTempFileForPrinting, 356 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_AllocateTempFileForPrinting,
357 OnAllocateTempFileForPrinting) 357 OnAllocateTempFileForPrinting)
358 IPC_MESSAGE_HANDLER(ViewHostMsg_TempFileForPrintingWritten, 358 IPC_MESSAGE_HANDLER(ViewHostMsg_TempFileForPrintingWritten,
359 OnTempFileForPrintingWritten) 359 OnTempFileForPrintingWritten)
360 #endif 360 #endif
pink (ping after 24hrs) 2009/10/13 21:04:51 #elif?
stuartmorgan 2009/10/13 22:07:43 Again, I was trying to be consistent with the rest
361 #if defined(OS_MACOSX)
362 IPC_MESSAGE_HANDLER(ViewHostMsg_AllocatePDFTransport,
363 OnAllocatePDFTransport)
364 #endif
361 IPC_MESSAGE_HANDLER(ViewHostMsg_ResourceTypeStats, OnResourceTypeStats) 365 IPC_MESSAGE_HANDLER(ViewHostMsg_ResourceTypeStats, OnResourceTypeStats)
362 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ResolveProxy, OnResolveProxy) 366 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ResolveProxy, OnResolveProxy)
363 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetDefaultPrintSettings, 367 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetDefaultPrintSettings,
364 OnGetDefaultPrintSettings) 368 OnGetDefaultPrintSettings)
365 #if defined(OS_WIN) 369 #if defined(OS_WIN) || defined(OS_MACOSX)
366 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ScriptedPrint, 370 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ScriptedPrint,
367 OnScriptedPrint) 371 OnScriptedPrint)
368 #endif 372 #endif
369 #if defined(OS_MACOSX) 373 #if defined(OS_MACOSX)
370 IPC_MESSAGE_HANDLER(ViewHostMsg_AllocTransportDIB, 374 IPC_MESSAGE_HANDLER(ViewHostMsg_AllocTransportDIB,
371 OnAllocTransportDIB) 375 OnAllocTransportDIB)
372 IPC_MESSAGE_HANDLER(ViewHostMsg_FreeTransportDIB, 376 IPC_MESSAGE_HANDLER(ViewHostMsg_FreeTransportDIB,
373 OnFreeTransportDIB) 377 OnFreeTransportDIB)
374 #endif 378 #endif
375 IPC_MESSAGE_HANDLER(ViewHostMsg_OpenChannelToExtension, 379 IPC_MESSAGE_HANDLER(ViewHostMsg_OpenChannelToExtension,
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
731 void ResourceMessageFilter::OnDuplicateSection( 735 void ResourceMessageFilter::OnDuplicateSection(
732 base::SharedMemoryHandle renderer_handle, 736 base::SharedMemoryHandle renderer_handle,
733 base::SharedMemoryHandle* browser_handle) { 737 base::SharedMemoryHandle* browser_handle) {
734 // Duplicate the handle in this process right now so the memory is kept alive 738 // Duplicate the handle in this process right now so the memory is kept alive
735 // (even if it is not mapped) 739 // (even if it is not mapped)
736 base::SharedMemory shared_buf(renderer_handle, true, handle()); 740 base::SharedMemory shared_buf(renderer_handle, true, handle());
737 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), browser_handle); 741 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), browser_handle);
738 } 742 }
739 #endif 743 #endif
740 744
745 #if defined(OS_MACOSX)
746 void ResourceMessageFilter::OnAllocatePDFTransport(
747 size_t buffer_size,
748 base::SharedMemoryHandle* handle) {
749 base::SharedMemory shared_buf;
750 shared_buf.Create(L"", false, false, buffer_size);
751 if (!shared_buf.Map(buffer_size)) {
752 *handle = base::SharedMemory::NULLHandle();
753 NOTREACHED() << "Cannot map PDF transport buffer";
754 return;
755 }
756 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), handle);
757 }
758 #endif
759
741 void ResourceMessageFilter::OnResourceTypeStats( 760 void ResourceMessageFilter::OnResourceTypeStats(
742 const WebCache::ResourceTypeStats& stats) { 761 const WebCache::ResourceTypeStats& stats) {
743 HISTOGRAM_COUNTS("WebCoreCache.ImagesSizeKB", 762 HISTOGRAM_COUNTS("WebCoreCache.ImagesSizeKB",
744 static_cast<int>(stats.images.size / 1024)); 763 static_cast<int>(stats.images.size / 1024));
745 HISTOGRAM_COUNTS("WebCoreCache.CSSStylesheetsSizeKB", 764 HISTOGRAM_COUNTS("WebCoreCache.CSSStylesheetsSizeKB",
746 static_cast<int>(stats.cssStyleSheets.size / 1024)); 765 static_cast<int>(stats.cssStyleSheets.size / 1024));
747 HISTOGRAM_COUNTS("WebCoreCache.ScriptsSizeKB", 766 HISTOGRAM_COUNTS("WebCoreCache.ScriptsSizeKB",
748 static_cast<int>(stats.scripts.size / 1024)); 767 static_cast<int>(stats.scripts.size / 1024));
749 HISTOGRAM_COUNTS("WebCoreCache.XSLStylesheetsSizeKB", 768 HISTOGRAM_COUNTS("WebCoreCache.XSLStylesheetsSizeKB",
750 static_cast<int>(stats.xslStyleSheets.size / 1024)); 769 static_cast<int>(stats.xslStyleSheets.size / 1024));
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 ViewHostMsg_GetDefaultPrintSettings::WriteReplyParams(reply_msg, params); 832 ViewHostMsg_GetDefaultPrintSettings::WriteReplyParams(reply_msg, params);
814 Send(reply_msg); 833 Send(reply_msg);
815 // If user hasn't cancelled. 834 // If user hasn't cancelled.
816 if (printer_query->cookie() && printer_query->settings().dpi()) { 835 if (printer_query->cookie() && printer_query->settings().dpi()) {
817 print_job_manager_->QueuePrinterQuery(printer_query.get()); 836 print_job_manager_->QueuePrinterQuery(printer_query.get());
818 } else { 837 } else {
819 printer_query->StopWorker(); 838 printer_query->StopWorker();
820 } 839 }
821 } 840 }
822 841
823 #if defined(OS_WIN) 842 #if defined(OS_WIN) || defined(OS_MACOSX)
824 843
825 void ResourceMessageFilter::OnScriptedPrint( 844 void ResourceMessageFilter::OnScriptedPrint(
826 const ViewHostMsg_ScriptedPrint_Params& params, 845 const ViewHostMsg_ScriptedPrint_Params& params,
827 IPC::Message* reply_msg) { 846 IPC::Message* reply_msg) {
847 #if defined(OS_WIN)
828 HWND host_window = gfx::NativeViewFromId(params.host_window_id); 848 HWND host_window = gfx::NativeViewFromId(params.host_window_id);
849 #elif defined(OS_MACOSX)
850 gfx::NativeWindow host_window = NULL;
851 // TODO: Get an actually window ref here, to allow a sheet-based print dialog.
Amanda Walker 2009/10/13 19:35:49 actually -> actual
stuartmorgan 2009/10/13 22:07:43 Done.
852 #endif
829 853
830 scoped_refptr<printing::PrinterQuery> printer_query; 854 scoped_refptr<printing::PrinterQuery> printer_query;
831 print_job_manager_->PopPrinterQuery(params.cookie, &printer_query); 855 print_job_manager_->PopPrinterQuery(params.cookie, &printer_query);
832 if (!printer_query.get()) { 856 if (!printer_query.get()) {
833 printer_query = new printing::PrinterQuery; 857 printer_query = new printing::PrinterQuery;
834 } 858 }
835 859
836 CancelableTask* task = NewRunnableMethod( 860 CancelableTask* task = NewRunnableMethod(
837 this, 861 this,
838 &ResourceMessageFilter::OnScriptedPrintReply, 862 &ResourceMessageFilter::OnScriptedPrintReply,
839 printer_query, 863 printer_query,
840 params.routing_id, 864 params.routing_id,
841 reply_msg); 865 reply_msg);
866 #if defined(OS_WIN)
842 // Shows the Print... dialog box. This is asynchronous, only the IPC message 867 // Shows the Print... dialog box. This is asynchronous, only the IPC message
843 // sender will hang until the Print dialog is dismissed. 868 // sender will hang until the Print dialog is dismissed.
844 if (!host_window || !IsWindow(host_window)) { 869 if (!host_window || !IsWindow(host_window)) {
845 // TODO(maruel): bug 1214347 Get the right browser window instead. 870 // TODO(maruel): bug 1214347 Get the right browser window instead.
846 host_window = GetDesktopWindow(); 871 host_window = GetDesktopWindow();
847 } else { 872 } else {
848 host_window = GetAncestor(host_window, GA_ROOTOWNER); 873 host_window = GetAncestor(host_window, GA_ROOTOWNER);
849 } 874 }
850 DCHECK(host_window); 875 DCHECK(host_window);
876 #endif
851 877
852 printer_query->GetSettings(printing::PrinterQuery::ASK_USER, 878 printer_query->GetSettings(printing::PrinterQuery::ASK_USER,
853 host_window, 879 host_window,
854 params.expected_pages_count, 880 params.expected_pages_count,
855 params.has_selection, 881 params.has_selection,
856 task); 882 task);
857 } 883 }
858 884
859 void ResourceMessageFilter::OnScriptedPrintReply( 885 void ResourceMessageFilter::OnScriptedPrintReply(
860 scoped_refptr<printing::PrinterQuery> printer_query, 886 scoped_refptr<printing::PrinterQuery> printer_query,
(...skipping 11 matching lines...) Expand all
872 } 898 }
873 ViewHostMsg_ScriptedPrint::WriteReplyParams(reply_msg, params); 899 ViewHostMsg_ScriptedPrint::WriteReplyParams(reply_msg, params);
874 Send(reply_msg); 900 Send(reply_msg);
875 if (params.params.dpi && params.params.document_cookie) { 901 if (params.params.dpi && params.params.document_cookie) {
876 print_job_manager_->QueuePrinterQuery(printer_query.get()); 902 print_job_manager_->QueuePrinterQuery(printer_query.get());
877 } else { 903 } else {
878 printer_query->StopWorker(); 904 printer_query->StopWorker();
879 } 905 }
880 } 906 }
881 907
882 #endif // OS_WIN 908 #endif // OS_WIN || OS_MACOSX
883 909
884 // static 910 // static
885 Clipboard* ResourceMessageFilter::GetClipboard() { 911 Clipboard* ResourceMessageFilter::GetClipboard() {
886 // We have a static instance of the clipboard service for use by all message 912 // We have a static instance of the clipboard service for use by all message
887 // filters. This instance lives for the life of the browser processes. 913 // filters. This instance lives for the life of the browser processes.
888 static Clipboard* clipboard = new Clipboard; 914 static Clipboard* clipboard = new Clipboard;
889 915
890 return clipboard; 916 return clipboard;
891 } 917 }
892 918
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1069 Release(); 1095 Release();
1070 } 1096 }
1071 1097
1072 #if defined(USE_TCMALLOC) 1098 #if defined(USE_TCMALLOC)
1073 void ResourceMessageFilter::OnRendererTcmalloc(base::ProcessId pid, 1099 void ResourceMessageFilter::OnRendererTcmalloc(base::ProcessId pid,
1074 const std::string& output) { 1100 const std::string& output) {
1075 ui_loop()->PostTask(FROM_HERE, 1101 ui_loop()->PostTask(FROM_HERE,
1076 NewRunnableFunction(AboutTcmallocRendererCallback, pid, output)); 1102 NewRunnableFunction(AboutTcmallocRendererCallback, pid, output));
1077 } 1103 }
1078 #endif 1104 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698