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