Index: chrome/renderer/printing/print_web_view_helper_pdf_win.cc |
diff --git a/chrome/renderer/printing/print_web_view_helper_linux.cc b/chrome/renderer/printing/print_web_view_helper_pdf_win.cc |
similarity index 76% |
copy from chrome/renderer/printing/print_web_view_helper_linux.cc |
copy to chrome/renderer/printing/print_web_view_helper_pdf_win.cc |
index 721dd973b3299de0618a4057dbbe853518b0c7d6..62b87dc4b0743bdec317ab427abbaecc7fd513c9 100644 |
--- a/chrome/renderer/printing/print_web_view_helper_linux.cc |
+++ b/chrome/renderer/printing/print_web_view_helper_pdf_win.cc |
@@ -1,11 +1,15 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
#include "chrome/renderer/printing/print_web_view_helper.h" |
+// XXX TODO in .gyp instead |
+#if defined(PRINTING_WIN_USES_PDF_AS_METAFILE) |
+ |
#include "base/logging.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/process/process_handle.h" |
#include "chrome/common/print_messages.h" |
#include "content/public/renderer/render_thread.h" |
#include "printing/metafile.h" |
@@ -16,11 +20,6 @@ |
#include "skia/ext/vector_canvas.h" |
#include "third_party/WebKit/public/web/WebLocalFrame.h" |
-#if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) |
-#include "base/process/process_handle.h" |
-#else |
-#include "base/file_descriptor_posix.h" |
-#endif // !defined(OS_CHROMEOS) && !defined(OS_ANDROID) |
namespace printing { |
@@ -99,53 +98,42 @@ bool PrintWebViewHelper::PrintPagesNative(blink::WebFrame* frame, |
uint32 buf_size = metafile.GetDataSize(); |
DCHECK_GT(buf_size, 0u); |
-#if defined(OS_CHROMEOS) || defined(OS_ANDROID) |
- int sequence_number = -1; |
- base::FileDescriptor fd; |
- |
- // Ask the browser to open a file for us. |
- Send(new PrintHostMsg_AllocateTempFileForPrinting(routing_id(), |
- &fd, |
- &sequence_number)); |
- if (!metafile.SaveToFD(fd)) |
- return false; |
- |
- // Tell the browser we've finished writing the file. |
- Send(new PrintHostMsg_TempFileForPrintingWritten(routing_id(), |
- sequence_number)); |
- return true; |
-#else |
PrintHostMsg_DidPrintPage_Params printed_page_params; |
printed_page_params.data_size = 0; |
printed_page_params.document_cookie = params.params.document_cookie; |
{ |
- scoped_ptr<base::SharedMemory> shared_mem( |
- content::RenderThread::Get()->HostAllocateSharedMemoryBuffer( |
- buf_size).release()); |
- if (!shared_mem.get()) { |
- NOTREACHED() << "AllocateSharedMemoryBuffer failed"; |
+ base::SharedMemory shared_buf; |
+ // Allocate a shared memory buffer to hold the generated metafile data. |
+ if (!shared_buf.CreateAndMapAnonymous(buf_size)) { |
+ NOTREACHED() << "Buffer allocation failed"; |
return false; |
} |
- if (!shared_mem->Map(buf_size)) { |
- NOTREACHED() << "Map failed"; |
+ // Copy the bits into shared memory. |
+ if (!metafile.GetData(shared_buf.memory(), buf_size)) { |
+ NOTREACHED() << "GetData() failed"; |
+ shared_buf.Unmap(); |
return false; |
} |
- metafile.GetData(shared_mem->memory(), buf_size); |
+ shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), |
+ &printed_page_params.metafile_data_handle); |
+ shared_buf.Unmap(); |
+ |
printed_page_params.data_size = buf_size; |
- shared_mem->GiveToProcess(base::GetCurrentProcessHandle(), |
- &(printed_page_params.metafile_data_handle)); |
+ Send(new PrintHostMsg_DuplicateSection( |
+ routing_id(), |
+ printed_page_params.metafile_data_handle, |
+ &printed_page_params.metafile_data_handle)); |
} |
for (size_t i = 0; i < printed_pages.size(); ++i) { |
printed_page_params.page_number = printed_pages[i]; |
Send(new PrintHostMsg_DidPrintPage(routing_id(), printed_page_params)); |
// Send the rest of the pages with an invalid metafile handle. |
- printed_page_params.metafile_data_handle.fd = -1; |
+ printed_page_params.metafile_data_handle = INVALID_HANDLE_VALUE; |
} |
return true; |
-#endif // defined(OS_CHROMEOS) |
} |
void PrintWebViewHelper::PrintPageInternal( |
@@ -195,4 +183,30 @@ void PrintWebViewHelper::PrintPageInternal( |
NOTREACHED() << "metafile failed"; |
} |
+bool PrintWebViewHelper::CopyMetafileDataToSharedMem( |
+ Metafile* metafile, base::SharedMemoryHandle* shared_mem_handle) { |
+ uint32 buf_size = metafile->GetDataSize(); |
+ base::SharedMemory shared_buf; |
+ // Allocate a shared memory buffer to hold the generated metafile data. |
+ if (!shared_buf.CreateAndMapAnonymous(buf_size)) { |
+ NOTREACHED() << "Buffer allocation failed"; |
+ return false; |
+ } |
+ |
+ // Copy the bits into shared memory. |
+ if (!metafile->GetData(shared_buf.memory(), buf_size)) { |
+ NOTREACHED() << "GetData() failed"; |
+ shared_buf.Unmap(); |
+ return false; |
+ } |
+ shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), shared_mem_handle); |
+ shared_buf.Unmap(); |
+ |
+ Send(new PrintHostMsg_DuplicateSection(routing_id(), *shared_mem_handle, |
+ shared_mem_handle)); |
+ return true; |
+} |
+ |
} // namespace printing |
+ |
+#endif // PRINTING_WIN_USES_PDF_AS_METAFILE |