Index: chrome/browser/renderer_host/resource_message_filter.cc |
=================================================================== |
--- chrome/browser/renderer_host/resource_message_filter.cc (revision 25608) |
+++ chrome/browser/renderer_host/resource_message_filter.cc (working copy) |
@@ -323,7 +323,13 @@ |
OnGetPreferredExtensionForMimeType) |
IPC_MESSAGE_HANDLER(ViewHostMsg_GetCPBrowsingContext, |
OnGetCPBrowsingContext) |
+#if defined(OS_WIN) |
IPC_MESSAGE_HANDLER(ViewHostMsg_DuplicateSection, OnDuplicateSection) |
+#endif |
+#if defined(OS_LINUX) |
+ IPC_MESSAGE_HANDLER(ViewHostMsg_AllocateShareMemory, |
+ OnAllocateShareMemory) |
+#endif |
IPC_MESSAGE_HANDLER(ViewHostMsg_ResourceTypeStats, OnResourceTypeStats) |
IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_ResolveProxy, OnResolveProxy) |
IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_GetDefaultPrintSettings, |
@@ -675,6 +681,7 @@ |
CPBrowsingContextManager::Instance()->Allocate(request_context_.get()); |
} |
+#if defined(OS_WIN) |
void ResourceMessageFilter::OnDuplicateSection( |
base::SharedMemoryHandle renderer_handle, |
base::SharedMemoryHandle* browser_handle) { |
@@ -683,7 +690,31 @@ |
base::SharedMemory shared_buf(renderer_handle, true, handle()); |
shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), browser_handle); |
} |
+#endif |
+#if defined(OS_LINUX) |
+void ResourceMessageFilter::OnAllocateShareMemory( |
+ size_t buffer_size, |
+ base::SharedMemoryHandle* browser_handle) { |
+ // We don't want to allocate a super big chunk of memory. |
+ // 32MB should be large enough for printing on Linux. |
+ if (buffer_size > 32 * 1024 * 1024) { |
+ *browser_handle = base::SharedMemory::NULLHandle(); |
+ NOTREACHED() << "Buffer too large: " << buffer_size; |
+ return; |
+ } |
+ base::SharedMemory shared_buf; |
+ shared_buf.Create(L"", false, false, buffer_size); |
+ if (shared_buf.Map(buffer_size)) { |
+ shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), browser_handle); |
+ } else { |
+ *browser_handle = base::SharedMemory::NULLHandle(); |
+ NOTREACHED() << "Cannot map buffer"; |
+ return; |
+ } |
+} |
+#endif |
+ |
void ResourceMessageFilter::OnResourceTypeStats( |
const WebCache::ResourceTypeStats& stats) { |
HISTOGRAM_COUNTS("WebCoreCache.ImagesSizeKB", |