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

Unified Diff: chrome/renderer/print_web_view_helper_linux.cc

Issue 6516022: Linux: Refactor printing to be more like Windows/Mac.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix mac build Created 9 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/print_web_view_helper_linux.cc
===================================================================
--- chrome/renderer/print_web_view_helper_linux.cc (revision 75320)
+++ chrome/renderer/print_web_view_helper_linux.cc (working copy)
@@ -13,6 +13,10 @@
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h"
+#if !defined(OS_CHROMEOS)
+#include "base/process_util.h"
+#endif // !defined(OS_CHROMEOS)
+
using printing::NativeMetafile;
using WebKit::WebFrame;
using WebKit::WebNode;
@@ -39,10 +43,13 @@
node,
frame->view());
page_count = prep_frame_view.GetExpectedPageCount();
+#if !defined(OS_CHROMEOS)
+ Send(new ViewHostMsg_DidGetPrintedPagesCount(routing_id(),
+ printParams.document_cookie,
+ page_count));
+#endif // !defined(OS_CHROMEOS)
- // TODO(myhuang): Send ViewHostMsg_DidGetPrintedPagesCount.
-
- if (page_count == 0)
+ if (!page_count)
return;
metafile.Init();
@@ -68,11 +75,12 @@
delete canvas;
metafile.Close();
- int sequence_number = -1;
// Get the size of the resulting metafile.
uint32 buf_size = metafile.GetDataSize();
DCHECK_GT(buf_size, 0u);
+#if defined(OS_CHROMEOS)
+ int sequence_number = -1;
base::FileDescriptor fd;
// Ask the browser to open a file for us.
@@ -80,12 +88,57 @@
&sequence_number))) {
return;
}
-
if (!metafile.SaveTo(fd))
return;
// Tell the browser we've finished writing the file.
Send(new ViewHostMsg_TempFileForPrintingWritten(sequence_number));
+#else
+ ViewHostMsg_DidPrintPage_Params printed_page_params;
+ printed_page_params.data_size = 0;
+ printed_page_params.document_cookie = params.params.document_cookie;
+
+ base::SharedMemoryHandle shared_mem_handle;
+ if (!Send(new ViewHostMsg_AllocateSharedMemoryBuffer(buf_size,
+ &shared_mem_handle))) {
+ NOTREACHED() << "AllocateSharedMemoryBuffer failed";
+ return;
+ }
+ if (!base::SharedMemory::IsHandleValid(shared_mem_handle)) {
+ NOTREACHED() << "AllocateSharedMemoryBuffer returned bad handle";
+ return;
+ }
+
+ {
+ base::SharedMemory shared_buf(shared_mem_handle, false);
+ if (!shared_buf.Map(buf_size)) {
+ NOTREACHED() << "Map failed";
+ return;
+ }
+ metafile.GetData(shared_buf.memory(), buf_size);
+ printed_page_params.data_size = buf_size;
+ shared_buf.GiveToProcess(base::GetCurrentProcessHandle(),
+ &(printed_page_params.metafile_data_handle));
+ }
+
+ // Send the first page with a valid handle.
+ printed_page_params.page_number = 0;
+ Send(new ViewHostMsg_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;
+ if (params.pages.empty()) {
+ for (int i = 1; i < page_count; ++i) {
+ printed_page_params.page_number = i;
+ Send(new ViewHostMsg_DidPrintPage(routing_id(), printed_page_params));
+ }
+ } else {
+ for (size_t i = 1; i < params.pages.size(); ++i) {
+ printed_page_params.page_number = params.pages[i];
+ Send(new ViewHostMsg_DidPrintPage(routing_id(), printed_page_params));
+ }
+ }
+#endif // defined(OS_CHROMEOS)
}
void PrintWebViewHelper::PrintPage(const ViewMsg_PrintPage_Params& params,

Powered by Google App Engine
This is Rietveld 408576698