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

Side by Side Diff: chrome/renderer/print_web_view_helper_linux.cc

Issue 6544028: Create a Factory for NativeMetafile. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ARM compile failure fix Created 9 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « chrome/renderer/mock_printer.cc ('k') | chrome/renderer/print_web_view_helper_mac.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/renderer/print_web_view_helper.h" 5 #include "chrome/renderer/print_web_view_helper.h"
6 6
7 #include "base/file_descriptor_posix.h" 7 #include "base/file_descriptor_posix.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/scoped_ptr.h"
9 #include "chrome/common/render_messages.h" 10 #include "chrome/common/render_messages.h"
10 #include "chrome/common/render_messages_params.h" 11 #include "chrome/common/render_messages_params.h"
12 #include "printing/native_metafile_factory.h"
11 #include "printing/native_metafile.h" 13 #include "printing/native_metafile.h"
12 #include "skia/ext/vector_canvas.h" 14 #include "skia/ext/vector_canvas.h"
13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h"
14 16
15 #if !defined(OS_CHROMEOS) 17 #if !defined(OS_CHROMEOS)
16 #include "base/process_util.h" 18 #include "base/process_util.h"
17 #endif // !defined(OS_CHROMEOS) 19 #endif // !defined(OS_CHROMEOS)
18 20
19 using WebKit::WebFrame; 21 using WebKit::WebFrame;
20 using WebKit::WebNode; 22 using WebKit::WebNode;
21 23
22 void PrintWebViewHelper::CreatePreviewDocument( 24 void PrintWebViewHelper::CreatePreviewDocument(
23 const ViewMsg_PrintPages_Params& params, WebFrame* frame) { 25 const ViewMsg_PrintPages_Params& params, WebFrame* frame) {
24 // We only can use PDF in the renderer because Cairo needs to create a 26 // We only can use PDF in the renderer because Cairo needs to create a
25 // temporary file for a PostScript surface. 27 // temporary file for a PostScript surface.
26 printing::NativeMetafile metafile; 28 scoped_ptr<printing::NativeMetafile> metafile(
29 printing::NativeMetafileFactory::CreateMetafile());
27 int page_count = 0; 30 int page_count = 0;
28 31
29 if (!RenderPages(params, frame, false, &page_count, &metafile)) 32 if (!RenderPages(params, frame, false, &page_count, metafile.get()))
30 return; 33 return;
31 34
32 // Get the size of the resulting metafile. 35 // Get the size of the resulting metafile.
33 uint32 buf_size = metafile.GetDataSize(); 36 uint32 buf_size = metafile->GetDataSize();
34 DCHECK_GT(buf_size, 0u); 37 DCHECK_GT(buf_size, 0u);
35 38
36 ViewHostMsg_DidPreviewDocument_Params preview_params; 39 ViewHostMsg_DidPreviewDocument_Params preview_params;
37 preview_params.document_cookie = params.params.document_cookie; 40 preview_params.document_cookie = params.params.document_cookie;
38 preview_params.expected_pages_count = page_count; 41 preview_params.expected_pages_count = page_count;
39 preview_params.data_size = buf_size; 42 preview_params.data_size = buf_size;
40 43
41 if (!CopyMetafileDataToSharedMem(&metafile, 44 if (!CopyMetafileDataToSharedMem(metafile.get(),
42 &(preview_params.metafile_data_handle))) { 45 &(preview_params.metafile_data_handle))) {
43 preview_params.expected_pages_count = 0; 46 preview_params.expected_pages_count = 0;
44 preview_params.data_size = 0; 47 preview_params.data_size = 0;
45 } 48 }
46 Send(new ViewHostMsg_PagesReadyForPreview(routing_id(), preview_params)); 49 Send(new ViewHostMsg_PagesReadyForPreview(routing_id(), preview_params));
47 } 50 }
48 51
49 void PrintWebViewHelper::PrintPages(const ViewMsg_PrintPages_Params& params, 52 void PrintWebViewHelper::PrintPages(const ViewMsg_PrintPages_Params& params,
50 WebFrame* frame, 53 WebFrame* frame,
51 WebNode* node) { 54 WebNode* node) {
52 // We only can use PDF in the renderer because Cairo needs to create a 55 // We only can use PDF in the renderer because Cairo needs to create a
53 // temporary file for a PostScript surface. 56 // temporary file for a PostScript surface.
54 printing::NativeMetafile metafile; 57 scoped_ptr<printing::NativeMetafile> metafile(
58 printing::NativeMetafileFactory::CreateMetafile());
55 int page_count = 0; 59 int page_count = 0;
56 bool send_expected_page_count = 60 bool send_expected_page_count =
57 #if defined(OS_CHROMEOS) 61 #if defined(OS_CHROMEOS)
58 false; 62 false;
59 #else 63 #else
60 true; 64 true;
61 #endif // defined(OS_CHROMEOS) 65 #endif // defined(OS_CHROMEOS)
62 66
63 if (!RenderPages(params, frame, send_expected_page_count, &page_count, 67 if (!RenderPages(params, frame, send_expected_page_count, &page_count,
64 &metafile)) { 68 metafile.get())) {
65 return; 69 return;
66 } 70 }
67 71
68 // Get the size of the resulting metafile. 72 // Get the size of the resulting metafile.
69 uint32 buf_size = metafile.GetDataSize(); 73 uint32 buf_size = metafile->GetDataSize();
70 DCHECK_GT(buf_size, 0u); 74 DCHECK_GT(buf_size, 0u);
71 75
72 #if defined(OS_CHROMEOS) 76 #if defined(OS_CHROMEOS)
73 int sequence_number = -1; 77 int sequence_number = -1;
74 base::FileDescriptor fd; 78 base::FileDescriptor fd;
75 79
76 // Ask the browser to open a file for us. 80 // Ask the browser to open a file for us.
77 if (!Send(new ViewHostMsg_AllocateTempFileForPrinting(&fd, 81 if (!Send(new ViewHostMsg_AllocateTempFileForPrinting(&fd,
78 &sequence_number))) { 82 &sequence_number))) {
79 return; 83 return;
80 } 84 }
81 if (!metafile.SaveTo(fd)) 85 if (!metafile->SaveTo(fd))
82 return; 86 return;
83 87
84 // Tell the browser we've finished writing the file. 88 // Tell the browser we've finished writing the file.
85 Send(new ViewHostMsg_TempFileForPrintingWritten(sequence_number)); 89 Send(new ViewHostMsg_TempFileForPrintingWritten(sequence_number));
86 #else 90 #else
87 ViewHostMsg_DidPrintPage_Params printed_page_params; 91 ViewHostMsg_DidPrintPage_Params printed_page_params;
88 printed_page_params.data_size = 0; 92 printed_page_params.data_size = 0;
89 printed_page_params.document_cookie = params.params.document_cookie; 93 printed_page_params.document_cookie = params.params.document_cookie;
90 94
91 base::SharedMemoryHandle shared_mem_handle; 95 base::SharedMemoryHandle shared_mem_handle;
92 if (!Send(new ViewHostMsg_AllocateSharedMemoryBuffer(buf_size, 96 if (!Send(new ViewHostMsg_AllocateSharedMemoryBuffer(buf_size,
93 &shared_mem_handle))) { 97 &shared_mem_handle))) {
94 NOTREACHED() << "AllocateSharedMemoryBuffer failed"; 98 NOTREACHED() << "AllocateSharedMemoryBuffer failed";
95 return; 99 return;
96 } 100 }
97 if (!base::SharedMemory::IsHandleValid(shared_mem_handle)) { 101 if (!base::SharedMemory::IsHandleValid(shared_mem_handle)) {
98 NOTREACHED() << "AllocateSharedMemoryBuffer returned bad handle"; 102 NOTREACHED() << "AllocateSharedMemoryBuffer returned bad handle";
99 return; 103 return;
100 } 104 }
101 105
102 { 106 {
103 base::SharedMemory shared_buf(shared_mem_handle, false); 107 base::SharedMemory shared_buf(shared_mem_handle, false);
104 if (!shared_buf.Map(buf_size)) { 108 if (!shared_buf.Map(buf_size)) {
105 NOTREACHED() << "Map failed"; 109 NOTREACHED() << "Map failed";
106 return; 110 return;
107 } 111 }
108 metafile.GetData(shared_buf.memory(), buf_size); 112 metafile->GetData(shared_buf.memory(), buf_size);
109 printed_page_params.data_size = buf_size; 113 printed_page_params.data_size = buf_size;
110 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), 114 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(),
111 &(printed_page_params.metafile_data_handle)); 115 &(printed_page_params.metafile_data_handle));
112 } 116 }
113 117
114 // Send the first page with a valid handle. 118 // Send the first page with a valid handle.
115 printed_page_params.page_number = 0; 119 printed_page_params.page_number = 0;
116 Send(new ViewHostMsg_DidPrintPage(routing_id(), printed_page_params)); 120 Send(new ViewHostMsg_DidPrintPage(routing_id(), printed_page_params));
117 121
118 // Send the rest of the pages with an invalid metafile handle. 122 // Send the rest of the pages with an invalid metafile handle.
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 canvas_size.height())); 221 canvas_size.height()));
218 frame->printPage(params.page_number, canvas->get()); 222 frame->printPage(params.page_number, canvas->get());
219 223
220 // TODO(myhuang): We should handle transformation for paper margins. 224 // TODO(myhuang): We should handle transformation for paper margins.
221 // TODO(myhuang): We should render the header and the footer. 225 // TODO(myhuang): We should render the header and the footer.
222 226
223 // Done printing. Close the device context to retrieve the compiled metafile. 227 // Done printing. Close the device context to retrieve the compiled metafile.
224 if (!metafile->FinishPage()) 228 if (!metafile->FinishPage())
225 NOTREACHED() << "metafile failed"; 229 NOTREACHED() << "metafile failed";
226 } 230 }
OLDNEW
« no previous file with comments | « chrome/renderer/mock_printer.cc ('k') | chrome/renderer/print_web_view_helper_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698