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

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

Issue 11469015: Renderer process can allocate anonymous shared memory without help from browser process on Windows. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: rebase Created 8 years 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/print_web_view_helper.cc ('k') | content/public/renderer/render_thread.h » ('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) 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
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
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 }
OLDNEW
« no previous file with comments | « chrome/renderer/print_web_view_helper.cc ('k') | content/public/renderer/render_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698