Update printing code to latest
This commit is contained in:
		
					parent
					
						
							
								bfc6d77bb3
							
						
					
				
			
			
				commit
				
					
						044daee086
					
				
			
		
					 5 changed files with 55 additions and 111 deletions
				
			
		|  | @ -386,7 +386,7 @@ class PrepareFrameAndViewForPrint : public blink::WebViewClient, | |||
|                               blink::WebLocalFrame* frame, | ||||
|                               const blink::WebNode& node, | ||||
|                               bool ignore_css_margins); | ||||
|   virtual ~PrepareFrameAndViewForPrint(); | ||||
|   ~PrepareFrameAndViewForPrint() override; | ||||
| 
 | ||||
|   // Optional. Replaces |frame_| with selection if needed. Will call |on_ready|
 | ||||
|   // when completed.
 | ||||
|  | @ -810,13 +810,19 @@ bool PrintWebViewHelper::FinalizePrintReadyDocument() { | |||
|   DCHECK(!is_print_ready_metafile_sent_); | ||||
|   print_preview_context_.FinalizePrintReadyDocument(); | ||||
| 
 | ||||
|   // Get the size of the resulting metafile.
 | ||||
|   PdfMetafileSkia* metafile = print_preview_context_.metafile(); | ||||
|   uint32_t buf_size = metafile->GetDataSize(); | ||||
|   DCHECK_GT(buf_size, 0u); | ||||
| 
 | ||||
|   PrintHostMsg_DidPreviewDocument_Params preview_params; | ||||
|   preview_params.data_size = buf_size; | ||||
| 
 | ||||
|   // Ask the browser to create the shared memory for us.
 | ||||
|   if (!CopyMetafileDataToSharedMem(*metafile, | ||||
|                                    &(preview_params.metafile_data_handle))) { | ||||
|     LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; | ||||
|     print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   preview_params.data_size = metafile->GetDataSize(); | ||||
|   preview_params.document_cookie = print_pages_params_->params.document_cookie; | ||||
|   preview_params.expected_pages_count = | ||||
|       print_preview_context_.total_page_count(); | ||||
|  | @ -824,13 +830,6 @@ bool PrintWebViewHelper::FinalizePrintReadyDocument() { | |||
|   preview_params.preview_request_id = | ||||
|       print_pages_params_->params.preview_request_id; | ||||
| 
 | ||||
|   // Ask the browser to create the shared memory for us.
 | ||||
|   if (!CopyMetafileDataToSharedMem(metafile, | ||||
|                                    &(preview_params.metafile_data_handle))) { | ||||
|     LOG(ERROR) << "CopyMetafileDataToSharedMem failed"; | ||||
|     print_preview_context_.set_error(PREVIEW_ERROR_METAFILE_COPY_FAILED); | ||||
|     return false; | ||||
|   } | ||||
|   is_print_ready_metafile_sent_ = true; | ||||
| 
 | ||||
|   Send(new PrintHostMsg_MetafileReadyForPrinting(routing_id(), preview_params)); | ||||
|  | @ -1160,21 +1159,25 @@ bool PrintWebViewHelper::RenderPagesForPrint(blink::WebLocalFrame* frame, | |||
| 
 | ||||
| #if defined(OS_POSIX) | ||||
| bool PrintWebViewHelper::CopyMetafileDataToSharedMem( | ||||
|     PdfMetafileSkia* metafile, | ||||
|     const PdfMetafileSkia& metafile, | ||||
|     base::SharedMemoryHandle* shared_mem_handle) { | ||||
|   uint32_t buf_size = metafile->GetDataSize(); | ||||
|   scoped_ptr<base::SharedMemory> shared_buf( | ||||
|       content::RenderThread::Get()->HostAllocateSharedMemoryBuffer( | ||||
|           buf_size).release()); | ||||
|   uint32_t buf_size = metafile.GetDataSize(); | ||||
|   if (buf_size == 0) | ||||
|     return false; | ||||
| 
 | ||||
|   if (shared_buf) { | ||||
|     if (shared_buf->Map(buf_size)) { | ||||
|       metafile->GetData(shared_buf->memory(), buf_size); | ||||
|       return shared_buf->GiveToProcess(base::GetCurrentProcessHandle(), | ||||
|                                        shared_mem_handle); | ||||
|     } | ||||
|   } | ||||
|   return false; | ||||
|   scoped_ptr<base::SharedMemory> shared_buf( | ||||
|       content::RenderThread::Get()->HostAllocateSharedMemoryBuffer(buf_size)); | ||||
|   if (!shared_buf) | ||||
|     return false; | ||||
| 
 | ||||
|   if (!shared_buf->Map(buf_size)) | ||||
|     return false; | ||||
| 
 | ||||
|   if (!metafile.GetData(shared_buf->memory(), buf_size)) | ||||
|     return false; | ||||
| 
 | ||||
|   return shared_buf->GiveToProcess(base::GetCurrentProcessHandle(), | ||||
|                                    shared_mem_handle); | ||||
| } | ||||
| #endif  // defined(OS_POSIX)
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -218,7 +218,7 @@ class PrintWebViewHelper | |||
| 
 | ||||
|   // Helper methods -----------------------------------------------------------
 | ||||
| 
 | ||||
|   bool CopyMetafileDataToSharedMem(PdfMetafileSkia* metafile, | ||||
|   bool CopyMetafileDataToSharedMem(const PdfMetafileSkia& metafile, | ||||
|                                    base::SharedMemoryHandle* shared_mem_handle); | ||||
| 
 | ||||
|   // Helper method to get page layout in points and fit to page if needed.
 | ||||
|  |  | |||
|  | @ -11,7 +11,6 @@ | |||
| #include "printing/metafile_skia_wrapper.h" | ||||
| #include "printing/page_size_margins.h" | ||||
| #include "printing/pdf_metafile_skia.h" | ||||
| #include "skia/ext/platform_device.h" | ||||
| #include "third_party/WebKit/public/web/WebLocalFrame.h" | ||||
| 
 | ||||
| #if !defined(OS_CHROMEOS) && !defined(OS_ANDROID) | ||||
|  | @ -91,49 +90,15 @@ bool PrintWebViewHelper::PrintPagesNative(blink::WebFrame* frame, | |||
| 
 | ||||
|   metafile.FinishDocument(); | ||||
| 
 | ||||
|   // Get the size of the resulting metafile.
 | ||||
|   uint32_t 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"; | ||||
|       return false; | ||||
|     } | ||||
| 
 | ||||
|     if (!shared_mem->Map(buf_size)) { | ||||
|       NOTREACHED() << "Map failed"; | ||||
|       return false; | ||||
|     } | ||||
|     metafile.GetData(shared_mem->memory(), buf_size); | ||||
|     printed_page_params.data_size = buf_size; | ||||
|     shared_mem->GiveToProcess(base::GetCurrentProcessHandle(), | ||||
|                               &(printed_page_params.metafile_data_handle)); | ||||
|   if (!CopyMetafileDataToSharedMem( | ||||
|           metafile, &printed_page_params.metafile_data_handle)) { | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   printed_page_params.data_size = metafile.GetDataSize(); | ||||
|   printed_page_params.document_cookie = params.params.document_cookie; | ||||
| 
 | ||||
|   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)); | ||||
|  | @ -141,7 +106,6 @@ bool PrintWebViewHelper::PrintPagesNative(blink::WebFrame* frame, | |||
|     printed_page_params.metafile_data_handle.fd = -1; | ||||
|   } | ||||
|   return true; | ||||
| #endif  // defined(OS_CHROMEOS)
 | ||||
| } | ||||
| 
 | ||||
| void PrintWebViewHelper::PrintPageInternal( | ||||
|  | @ -165,7 +129,6 @@ void PrintWebViewHelper::PrintPageInternal( | |||
|     return; | ||||
| 
 | ||||
|   MetafileSkiaWrapper::SetMetafileOnCanvas(*canvas, metafile); | ||||
|   skia::SetIsDraftMode(*canvas, is_print_ready_metafile_sent_); | ||||
| 
 | ||||
|   RenderPageContent(frame, params.page_number, canvas_area, content_area, | ||||
|                     scale_factor, canvas); | ||||
|  |  | |||
|  | @ -42,8 +42,9 @@ void PrintWebViewHelper::PrintPageInternal( | |||
|   page_params.content_area = content_area_in_dpi; | ||||
| 
 | ||||
|   // Ask the browser to create the shared memory for us. | ||||
|   if (!CopyMetafileDataToSharedMem(&metafile, | ||||
|   if (!CopyMetafileDataToSharedMem(metafile, | ||||
|                                    &(page_params.metafile_data_handle))) { | ||||
|     // TODO(thestig): Fail and return false instead. | ||||
|     page_params.data_size = 0; | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
|  | @ -95,40 +95,16 @@ bool PrintWebViewHelper::PrintPagesNative(blink::WebFrame* frame, | |||
| 
 | ||||
|   metafile.FinishDocument(); | ||||
| 
 | ||||
|   // Get the size of the resulting metafile.
 | ||||
|   uint32_t buf_size = metafile.GetDataSize(); | ||||
|   DCHECK_GT(buf_size, 0u); | ||||
| 
 | ||||
|   PrintHostMsg_DidPrintPage_Params printed_page_params; | ||||
|   printed_page_params.data_size = 0; | ||||
|   if (!CopyMetafileDataToSharedMem( | ||||
|           metafile, &printed_page_params.metafile_data_handle)) { | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   printed_page_params.content_area = params.params.printable_area; | ||||
|   printed_page_params.data_size = metafile.GetDataSize(); | ||||
|   printed_page_params.document_cookie = params.params.document_cookie; | ||||
|   printed_page_params.page_size = params.params.page_size; | ||||
|   printed_page_params.content_area = params.params.printable_area; | ||||
| 
 | ||||
|   { | ||||
|     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(), | ||||
|                              &printed_page_params.metafile_data_handle); | ||||
|     shared_buf.Unmap(); | ||||
| 
 | ||||
|     printed_page_params.data_size = buf_size; | ||||
|     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]; | ||||
|  | @ -216,24 +192,25 @@ void PrintWebViewHelper::PrintPageInternal( | |||
| } | ||||
| 
 | ||||
| bool PrintWebViewHelper::CopyMetafileDataToSharedMem( | ||||
|     PdfMetafileSkia* metafile, | ||||
|     const PdfMetafileSkia& metafile, | ||||
|     base::SharedMemoryHandle* shared_mem_handle) { | ||||
|   uint32_t buf_size = metafile->GetDataSize(); | ||||
|   uint32_t buf_size = metafile.GetDataSize(); | ||||
|   if (buf_size == 0) | ||||
|     return false; | ||||
| 
 | ||||
|   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"; | ||||
|   if (!shared_buf.CreateAndMapAnonymous(buf_size)) | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   // Copy the bits into shared memory.
 | ||||
|   if (!metafile->GetData(shared_buf.memory(), buf_size)) { | ||||
|     NOTREACHED() << "GetData() failed"; | ||||
|     shared_buf.Unmap(); | ||||
|   if (!metafile.GetData(shared_buf.memory(), buf_size)) | ||||
|     return false; | ||||
| 
 | ||||
|   if (!shared_buf.GiveToProcess(base::GetCurrentProcessHandle(), | ||||
|                                 shared_mem_handle)) { | ||||
|     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)); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Cheng Zhao
				Cheng Zhao