| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 84 | 84 |
| 85 // Tell the browser we've finished writing the file. | 85 // Tell the browser we've finished writing the file. |
| 86 Send(new PrintHostMsg_TempFileForPrintingWritten(routing_id(), | 86 Send(new PrintHostMsg_TempFileForPrintingWritten(routing_id(), |
| 87 sequence_number)); | 87 sequence_number)); |
| 88 return true; | 88 return true; |
| 89 #else | 89 #else |
| 90 PrintHostMsg_DidPrintPage_Params printed_page_params; | 90 PrintHostMsg_DidPrintPage_Params printed_page_params; |
| 91 printed_page_params.data_size = 0; | 91 printed_page_params.data_size = 0; |
| 92 printed_page_params.document_cookie = params.params.document_cookie; | 92 printed_page_params.document_cookie = params.params.document_cookie; |
| 93 | 93 |
| 94 base::SharedMemoryHandle shared_mem_handle = | 94 { |
| 95 content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(buf_size); | 95 scoped_ptr<base::SharedMemory> shared_mem( |
| 96 if (!base::SharedMemory::IsHandleValid(shared_mem_handle)) { | 96 content::RenderThread::Get()->HostAllocateSharedMemoryBuffer( |
| 97 NOTREACHED() << "AllocateSharedMemoryBuffer returned bad handle"; | 97 buf_size).release()); |
| 98 return false; | 98 if (!shared_mem.get()) { |
| 99 } | 99 NOTREACHED() << "AllocateSharedMemoryBuffer failed"; |
| 100 return false; |
| 101 } |
| 100 | 102 |
| 101 { | 103 if (!shared_mem->Map(buf_size)) { |
| 102 base::SharedMemory shared_buf(shared_mem_handle, false); | |
| 103 if (!shared_buf.Map(buf_size)) { | |
| 104 NOTREACHED() << "Map failed"; | 104 NOTREACHED() << "Map failed"; |
| 105 return false; | 105 return false; |
| 106 } | 106 } |
| 107 metafile.GetData(shared_buf.memory(), buf_size); | 107 metafile.GetData(shared_mem->memory(), buf_size); |
| 108 printed_page_params.data_size = buf_size; | 108 printed_page_params.data_size = buf_size; |
| 109 shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), | 109 shared_mem->GiveToProcess(base::GetCurrentProcessHandle(), |
| 110 &(printed_page_params.metafile_data_handle)); | 110 &(printed_page_params.metafile_data_handle)); |
| 111 } | 111 } |
| 112 | 112 |
| 113 for (size_t i = 0; i < printed_pages.size(); ++i) { | 113 for (size_t i = 0; i < printed_pages.size(); ++i) { |
| 114 printed_page_params.page_number = printed_pages[i]; | 114 printed_page_params.page_number = printed_pages[i]; |
| 115 Send(new PrintHostMsg_DidPrintPage(routing_id(), printed_page_params)); | 115 Send(new PrintHostMsg_DidPrintPage(routing_id(), printed_page_params)); |
| 116 // Send the rest of the pages with an invalid metafile handle. | 116 // Send the rest of the pages with an invalid metafile handle. |
| 117 printed_page_params.metafile_data_handle.fd = -1; | 117 printed_page_params.metafile_data_handle.fd = -1; |
| 118 } | 118 } |
| 119 return true; | 119 return true; |
| 120 #endif // defined(OS_CHROMEOS) | 120 #endif // defined(OS_CHROMEOS) |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 page_layout_in_points, *header_footer_info_, | 207 page_layout_in_points, *header_footer_info_, |
| 208 params.params); | 208 params.params); |
| 209 } | 209 } |
| 210 RenderPageContent(frame, params.page_number, canvas_area, content_area, | 210 RenderPageContent(frame, params.page_number, canvas_area, content_area, |
| 211 scale_factor, canvas.get()); | 211 scale_factor, canvas.get()); |
| 212 | 212 |
| 213 // Done printing. Close the device context to retrieve the compiled metafile. | 213 // Done printing. Close the device context to retrieve the compiled metafile. |
| 214 if (!metafile->FinishPage()) | 214 if (!metafile->FinishPage()) |
| 215 NOTREACHED() << "metafile failed"; | 215 NOTREACHED() << "metafile failed"; |
| 216 } | 216 } |
| OLD | NEW |