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
Reference in a new issue