summaryrefslogtreecommitdiffstats
path: root/content/browser
diff options
context:
space:
mode:
authorkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-25 17:52:18 +0000
committerkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-25 17:52:18 +0000
commit0d9667bedff2c8f7e218a32806b17b39c3dcb407 (patch)
treeb968128a7f6094afa1f0c08d9a4f9e4e05895bfa /content/browser
parent6d85939af0786b05485ff2d7a91be861df1687ba (diff)
downloadchromium_src-0d9667bedff2c8f7e218a32806b17b39c3dcb407.zip
chromium_src-0d9667bedff2c8f7e218a32806b17b39c3dcb407.tar.gz
chromium_src-0d9667bedff2c8f7e218a32806b17b39c3dcb407.tar.bz2
Created a new BrowserMessageFilter to handle print related IPC messages.
Move print related IPC message handlers from render_message_filter to printing_message_filter. BUG=none TEST=printing works after code changes. Review URL: http://codereview.chromium.org/6546051 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76067 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser')
-rw-r--r--content/browser/renderer_host/render_message_filter.cc162
-rw-r--r--content/browser/renderer_host/render_message_filter.h45
-rw-r--r--content/browser/renderer_host/render_message_filter_gtk.cc97
3 files changed, 6 insertions, 298 deletions
diff --git a/content/browser/renderer_host/render_message_filter.cc b/content/browser/renderer_host/render_message_filter.cc
index 6fefd70..8aef1ce 100644
--- a/content/browser/renderer_host/render_message_filter.cc
+++ b/content/browser/renderer_host/render_message_filter.cc
@@ -9,8 +9,6 @@
#include "base/command_line.h"
#include "base/file_util.h"
#include "base/metrics/histogram.h"
-#include "base/process_util.h"
-#include "base/shared_memory.h"
#include "base/sys_string_conversions.h"
#include "base/threading/worker_pool.h"
#include "base/threading/thread.h"
@@ -35,8 +33,6 @@
#include "chrome/browser/plugin_process_host.h"
#include "chrome/browser/plugin_service.h"
#include "chrome/browser/ppapi_plugin_process_host.h"
-#include "chrome/browser/printing/print_job_manager.h"
-#include "chrome/browser/printing/printer_query.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/renderer_host/browser_render_process_host.h"
#include "chrome/browser/spellchecker_platform_engine.h"
@@ -145,28 +141,6 @@ class WriteClipboardTask : public Task {
scoped_ptr<ui::Clipboard::ObjectMap> objects_;
};
-void RenderParamsFromPrintSettings(const printing::PrintSettings& settings,
- ViewMsg_Print_Params* params) {
- DCHECK(params);
- params->page_size = settings.page_setup_device_units().physical_size();
- params->printable_size.SetSize(
- settings.page_setup_device_units().content_area().width(),
- settings.page_setup_device_units().content_area().height());
- params->margin_top = settings.page_setup_device_units().content_area().x();
- params->margin_left = settings.page_setup_device_units().content_area().y();
- params->dpi = settings.dpi();
- // Currently hardcoded at 1.25. See PrintSettings' constructor.
- params->min_shrink = settings.min_shrink;
- // Currently hardcoded at 2.0. See PrintSettings' constructor.
- params->max_shrink = settings.max_shrink;
- // Currently hardcoded at 72dpi. See PrintSettings' constructor.
- params->desired_dpi = settings.desired_dpi;
- // Always use an invalid cookie.
- params->document_cookie = 0;
- params->selection_only = settings.selection_only;
- params->supports_alpha_blend = settings.supports_alpha_blend();
-}
-
// Common functionality for converting a sync renderer message to a callback
// function in the browser. Derive from this, create it on the heap when
// issuing your callback. When done, write your reply parameters into
@@ -327,7 +301,6 @@ RenderMessageFilter::RenderMessageFilter(
RenderWidgetHelper* render_widget_helper)
: resource_dispatcher_host_(g_browser_process->resource_dispatcher_host()),
plugin_service_(plugin_service),
- print_job_manager_(g_browser_process->print_job_manager()),
profile_(profile),
content_settings_(profile->GetHostContentSettingsMap()),
ALLOW_THIS_IN_INITIALIZER_LIST(resolve_proxy_msg_helper_(this, NULL)),
@@ -343,12 +316,6 @@ RenderMessageFilter::RenderMessageFilter(
DCHECK(request_context_);
render_widget_helper_->Init(render_process_id_, resource_dispatcher_host_);
-#if defined(OS_CHROMEOS)
- cloud_print_enabled_ = true;
-#else
- cloud_print_enabled_ = CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kEnableCloudPrint);
-#endif
}
RenderMessageFilter::~RenderMessageFilter() {
@@ -443,24 +410,14 @@ bool RenderMessageFilter::OnMessageReceived(const IPC::Message& message,
IPC_MESSAGE_HANDLER(ViewHostMsg_RevealFolderInOS, OnRevealFolderInOS)
IPC_MESSAGE_HANDLER(ViewHostMsg_GetCPBrowsingContext,
OnGetCPBrowsingContext)
-#if defined(OS_WIN)
- IPC_MESSAGE_HANDLER(ViewHostMsg_DuplicateSection, OnDuplicateSection)
-#endif
+#if defined(OS_POSIX)
IPC_MESSAGE_HANDLER(ViewHostMsg_AllocateSharedMemoryBuffer,
OnAllocateSharedMemoryBuffer)
-#if defined(OS_CHROMEOS)
- IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_AllocateTempFileForPrinting,
- OnAllocateTempFileForPrinting)
- IPC_MESSAGE_HANDLER(ViewHostMsg_TempFileForPrintingWritten,
- OnTempFileForPrintingWritten)
#endif
IPC_MESSAGE_HANDLER(ViewHostMsg_ResourceTypeStats, OnResourceTypeStats)
IPC_MESSAGE_HANDLER(ViewHostMsg_V8HeapStats, OnV8HeapStats)
IPC_MESSAGE_HANDLER(ViewHostMsg_DidZoomURL, OnDidZoomURL)
IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ResolveProxy, OnResolveProxy)
- IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetDefaultPrintSettings,
- OnGetDefaultPrintSettings)
- IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ScriptedPrint, OnScriptedPrint)
#if defined(OS_MACOSX)
IPC_MESSAGE_HANDLER(ViewHostMsg_AllocTransportDIB, OnAllocTransportDIB)
IPC_MESSAGE_HANDLER(ViewHostMsg_FreeTransportDIB, OnFreeTransportDIB)
@@ -987,17 +944,7 @@ void RenderMessageFilter::OnGetCPBrowsingContext(uint32* context) {
request_context_->GetURLRequestContext());
}
-#if defined(OS_WIN)
-void RenderMessageFilter::OnDuplicateSection(
- base::SharedMemoryHandle renderer_handle,
- base::SharedMemoryHandle* browser_handle) {
- // Duplicate the handle in this process right now so the memory is kept alive
- // (even if it is not mapped)
- base::SharedMemory shared_buf(renderer_handle, true, peer_handle());
- shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), browser_handle);
-}
-#endif
-
+#if defined(OS_POSIX)
void RenderMessageFilter::OnAllocateSharedMemoryBuffer(
uint32 buffer_size,
base::SharedMemoryHandle* handle) {
@@ -1007,8 +954,9 @@ void RenderMessageFilter::OnAllocateSharedMemoryBuffer(
NOTREACHED() << "Cannot map shared memory buffer";
return;
}
- shared_buf.GiveToProcess(peer_handle(), handle);
+ shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), handle);
}
+#endif
void RenderMessageFilter::OnResourceTypeStats(
const WebCache::ResourceTypeStats& stats) {
@@ -1107,108 +1055,6 @@ void RenderMessageFilter::OnResolveProxyCompleted(
Send(reply_msg);
}
-void RenderMessageFilter::OnGetDefaultPrintSettings(IPC::Message* reply_msg) {
- scoped_refptr<printing::PrinterQuery> printer_query;
- if (!print_job_manager_->printing_enabled()) {
- // Reply with NULL query.
- OnGetDefaultPrintSettingsReply(printer_query, reply_msg);
- return;
- }
-
- print_job_manager_->PopPrinterQuery(0, &printer_query);
- if (!printer_query.get()) {
- printer_query = new printing::PrinterQuery;
- }
-
- CancelableTask* task = NewRunnableMethod(
- this,
- &RenderMessageFilter::OnGetDefaultPrintSettingsReply,
- printer_query,
- reply_msg);
- // Loads default settings. This is asynchronous, only the IPC message sender
- // will hang until the settings are retrieved.
- printer_query->GetSettings(printing::PrinterQuery::DEFAULTS,
- NULL,
- 0,
- false,
- true,
- task);
-}
-
-void RenderMessageFilter::OnGetDefaultPrintSettingsReply(
- scoped_refptr<printing::PrinterQuery> printer_query,
- IPC::Message* reply_msg) {
- ViewMsg_Print_Params params;
- if (!printer_query.get() ||
- printer_query->last_status() != printing::PrintingContext::OK) {
- memset(&params, 0, sizeof(params));
- } else {
- RenderParamsFromPrintSettings(printer_query->settings(), &params);
- params.document_cookie = printer_query->cookie();
- }
- ViewHostMsg_GetDefaultPrintSettings::WriteReplyParams(reply_msg, params);
- Send(reply_msg);
- // If printing was enabled.
- if (printer_query.get()) {
- // If user hasn't cancelled.
- if (printer_query->cookie() && printer_query->settings().dpi()) {
- print_job_manager_->QueuePrinterQuery(printer_query.get());
- } else {
- printer_query->StopWorker();
- }
- }
-}
-
-void RenderMessageFilter::OnScriptedPrint(
- const ViewHostMsg_ScriptedPrint_Params& params,
- IPC::Message* reply_msg) {
- gfx::NativeView host_view =
- gfx::NativeViewFromIdInBrowser(params.host_window_id);
-
- scoped_refptr<printing::PrinterQuery> printer_query;
- print_job_manager_->PopPrinterQuery(params.cookie, &printer_query);
- if (!printer_query.get()) {
- printer_query = new printing::PrinterQuery;
- }
-
- CancelableTask* task = NewRunnableMethod(
- this,
- &RenderMessageFilter::OnScriptedPrintReply,
- printer_query,
- params.routing_id,
- reply_msg);
-
- printer_query->GetSettings(printing::PrinterQuery::ASK_USER,
- host_view,
- params.expected_pages_count,
- params.has_selection,
- params.use_overlays,
- task);
-}
-
-void RenderMessageFilter::OnScriptedPrintReply(
- scoped_refptr<printing::PrinterQuery> printer_query,
- int routing_id,
- IPC::Message* reply_msg) {
- ViewMsg_PrintPages_Params params;
- if (printer_query->last_status() != printing::PrintingContext::OK ||
- !printer_query->settings().dpi()) {
- memset(&params, 0, sizeof(params));
- } else {
- RenderParamsFromPrintSettings(printer_query->settings(), &params.params);
- params.params.document_cookie = printer_query->cookie();
- params.pages =
- printing::PageRange::GetPages(printer_query->settings().ranges);
- }
- ViewHostMsg_ScriptedPrint::WriteReplyParams(reply_msg, params);
- Send(reply_msg);
- if (params.params.dpi && params.params.document_cookie) {
- print_job_manager_->QueuePrinterQuery(printer_query.get());
- } else {
- printer_query->StopWorker();
- }
-}
-
// static
ui::Clipboard* RenderMessageFilter::GetClipboard() {
// We have a static instance of the clipboard service for use by all message
diff --git a/content/browser/renderer_host/render_message_filter.h b/content/browser/renderer_host/render_message_filter.h
index 4f16c62..34fbd71 100644
--- a/content/browser/renderer_host/render_message_filter.h
+++ b/content/browser/renderer_host/render_message_filter.h
@@ -54,13 +54,6 @@ namespace net {
class CookieStore;
}
-namespace printing {
-class PrinterQuery;
-class PrintJobManager;
-}
-
-struct ViewHostMsg_ScriptedPrint_Params;
-
// This class filters out incoming IPC messages for the renderer process on the
// IPC thread.
class RenderMessageFilter : public BrowserMessageFilter,
@@ -216,24 +209,13 @@ class RenderMessageFilter : public BrowserMessageFilter,
void OnRevealFolderInOS(const FilePath& path);
void OnGetCPBrowsingContext(uint32* context);
-#if defined(OS_WIN)
- // Used to pass resulting EMF from renderer to browser in printing.
- void OnDuplicateSection(base::SharedMemoryHandle renderer_handle,
- base::SharedMemoryHandle* browser_handle);
-#endif
-
-#if defined(OS_CHROMEOS)
- // Used to ask the browser allocate a temporary file for the renderer
- // to fill in resulting PDF in renderer.
- void OnAllocateTempFileForPrinting(IPC::Message* reply_msg);
- void OnTempFileForPrintingWritten(int sequence_number);
-#endif
-
+#if defined(OS_POSIX)
// Used to ask the browser to allocate a block of shared memory for the
// renderer to send back data in, since shared memory can't be created
// in the renderer on POSIX due to the sandbox.
void OnAllocateSharedMemoryBuffer(uint32 buffer_size,
base::SharedMemoryHandle* handle);
+#endif
void OnResourceTypeStats(const WebKit::WebCache::ResourceTypeStats& stats);
static void OnResourceTypeStatsOnUIThread(
@@ -262,24 +244,6 @@ class RenderMessageFilter : public BrowserMessageFilter,
int result,
const std::string& proxy_list);
- // A javascript code requested to print the current page. This is done in two
- // steps and this is the first step. Get the print setting right here
- // synchronously. It will hang the I/O completely.
- void OnGetDefaultPrintSettings(IPC::Message* reply_msg);
- void OnGetDefaultPrintSettingsReply(
- scoped_refptr<printing::PrinterQuery> printer_query,
- IPC::Message* reply_msg);
-
- // A javascript code requested to print the current page. The renderer host
- // have to show to the user the print dialog and returns the selected print
- // settings.
- void OnScriptedPrint(const ViewHostMsg_ScriptedPrint_Params& params,
- IPC::Message* reply_msg);
- void OnScriptedPrintReply(
- scoped_refptr<printing::PrinterQuery> printer_query,
- int routing_id,
- IPC::Message* reply_msg);
-
// Browser side transport DIB allocation
void OnAllocTransportDIB(size_t size,
bool cache_in_browser,
@@ -353,8 +317,6 @@ class RenderMessageFilter : public BrowserMessageFilter,
IPC::Message* reply_msg);
void DoOnClipboardReadFilenames(ui::Clipboard::Buffer buffer,
IPC::Message* reply_msg);
- void DoOnAllocateTempFileForPrinting(IPC::Message* reply_msg);
- void DoOnTempFileForPrintingWritten(int sequence_number);
#endif
bool CheckBenchmarkingEnabled() const;
@@ -371,7 +333,6 @@ class RenderMessageFilter : public BrowserMessageFilter,
// by the BrowserProcess, which has a wider scope than we do.
ResourceDispatcherHost* resource_dispatcher_host_;
PluginService* plugin_service_;
- printing::PrintJobManager* print_job_manager_;
// The Profile associated with our renderer process. This should only be
// accessed on the UI thread!
@@ -403,8 +364,6 @@ class RenderMessageFilter : public BrowserMessageFilter,
// Whether this process is used for off the record tabs.
bool off_the_record_;
- bool cloud_print_enabled_;
-
base::TimeTicks last_plugin_refresh_time_; // Initialized to 0.
scoped_refptr<WebKitContext> webkit_context_;
diff --git a/content/browser/renderer_host/render_message_filter_gtk.cc b/content/browser/renderer_host/render_message_filter_gtk.cc
index ce260c4..1d25313 100644
--- a/content/browser/renderer_host/render_message_filter_gtk.cc
+++ b/content/browser/renderer_host/render_message_filter_gtk.cc
@@ -4,14 +4,7 @@
#include "content/browser/renderer_host/render_message_filter.h"
-#include <fcntl.h>
-#include <map>
-
-#include "base/file_util.h"
-#include "base/lazy_instance.h"
-#include "base/path_service.h"
#include "chrome/browser/browser_thread.h"
-#include "chrome/common/chrome_paths.h"
#include "chrome/common/render_messages.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebScreenInfo.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/x11/WebScreenInfoFactory.h"
@@ -19,28 +12,9 @@
#include "ui/base/x/x11_util.h"
#include "ui/gfx/gtk_native_view_id_manager.h"
-#if defined(OS_CHROMEOS)
-#include "chrome/browser/printing/print_dialog_cloud.h"
-#endif
-
using WebKit::WebScreenInfo;
using WebKit::WebScreenInfoFactory;
-namespace {
-
-typedef std::map<int, FilePath> SequenceToPathMap;
-
-struct PrintingSequencePathMap {
- SequenceToPathMap map;
- int sequence;
-};
-
-// No locking, only access on the FILE thread.
-static base::LazyInstance<PrintingSequencePathMap>
- g_printing_file_descriptor_map(base::LINKER_INITIALIZED);
-
-} // namespace
-
// We get null window_ids passed into the two functions below; please see
// http://crbug.com/9060 for more details.
@@ -175,56 +149,6 @@ void RenderMessageFilter::DoOnClipboardReadFilenames(
Send(reply_msg);
}
-#if defined(OS_CHROMEOS)
-void RenderMessageFilter::DoOnAllocateTempFileForPrinting(
- IPC::Message* reply_msg) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- base::FileDescriptor temp_file_fd(-1, false);
- SequenceToPathMap* map = &g_printing_file_descriptor_map.Get().map;
- const int sequence_number = g_printing_file_descriptor_map.Get().sequence++;
-
- FilePath path;
- if (file_util::CreateTemporaryFile(&path)) {
- int fd = open(path.value().c_str(), O_WRONLY);
- if (fd >= 0) {
- SequenceToPathMap::iterator it = map->find(sequence_number);
- if (it != map->end()) {
- NOTREACHED() << "Sequence number already in use. seq=" <<
- sequence_number;
- } else {
- (*map)[sequence_number] = path;
- temp_file_fd.fd = fd;
- temp_file_fd.auto_close = true;
- }
- }
- }
-
- ViewHostMsg_AllocateTempFileForPrinting::WriteReplyParams(
- reply_msg, temp_file_fd, sequence_number);
- Send(reply_msg);
-}
-
-void RenderMessageFilter::DoOnTempFileForPrintingWritten(int sequence_number) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
- SequenceToPathMap* map = &g_printing_file_descriptor_map.Get().map;
- SequenceToPathMap::iterator it = map->find(sequence_number);
- if (it == map->end()) {
- NOTREACHED() << "Got a sequence that we didn't pass to the "
- "renderer: " << sequence_number;
- return;
- }
-
- if (cloud_print_enabled_)
- PrintDialogCloud::CreatePrintDialogForPdf(it->second, string16(), true);
- else
- NOTIMPLEMENTED();
-
- // Erase the entry in the map.
- map->erase(it);
-}
-
-#endif // defined(OS_CHROMEOS)
-
void RenderMessageFilter::OnGetScreenInfo(gfx::NativeViewId view,
IPC::Message* reply_msg) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
@@ -323,24 +247,3 @@ void RenderMessageFilter::OnClipboardReadFilenames(
this, &RenderMessageFilter::DoOnClipboardReadFilenames, buffer,
reply_msg));
}
-
-#if defined(OS_CHROMEOS)
-void RenderMessageFilter::OnAllocateTempFileForPrinting(
- IPC::Message* reply_msg) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- NewRunnableMethod(
- this, &RenderMessageFilter::DoOnAllocateTempFileForPrinting,
- reply_msg));
-}
-
-void RenderMessageFilter::OnTempFileForPrintingWritten(int sequence_number) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- BrowserThread::PostTask(
- BrowserThread::FILE, FROM_HERE,
- NewRunnableMethod(
- this, &RenderMessageFilter::DoOnTempFileForPrintingWritten,
- sequence_number));
-}
-#endif // defined(OS_CHROMEOS)