0

[printing] Convert PrintHostMsg_DidPrintDocument to Mojo

This CL converts PrintHostMsg_DidPrintDocument message to
DidPrintDocument() in mojom::PrintManagerHost.

Bug: 1008939
Change-Id: I80a7dddda4226c6158ffae505b0368ec2a0a4d69
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2544295
Reviewed-by: Dave Tapuska <dtapuska@chromium.org>
Reviewed-by: Rebekah Potter <rbpotter@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Reviewed-by: Wei Li <weili@chromium.org>
Reviewed-by: Bo <boliu@chromium.org>
Reviewed-by: Andrey Kosyakov <caseq@chromium.org>
Commit-Queue: Julie Kim <jkim@igalia.com>
Cr-Commit-Position: refs/heads/master@{#833180}
This commit is contained in:
Julie Jeongeun Kim
2020-12-03 06:40:47 +00:00
committed by Chromium LUCI CQ
parent 5da07e88ee
commit 36c74050dd
16 changed files with 107 additions and 172 deletions

@ -92,18 +92,20 @@ void AwPrintManager::OnScriptedPrint(
render_frame_host->Send(reply_msg);
}
void AwPrintManager::OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const printing::mojom::DidPrintDocumentParams& params,
std::unique_ptr<DelayedFrameDispatchHelper> helper) {
if (params.document_cookie != cookie_)
void AwPrintManager::DidPrintDocument(
printing::mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) {
if (params->document_cookie != cookie_) {
std::move(callback).Run(false);
return;
}
const printing::mojom::DidPrintContentParams& content = *params.content;
const printing::mojom::DidPrintContentParams& content = *params->content;
if (!content.metafile_data_region.IsValid()) {
NOTREACHED() << "invalid memory handle";
web_contents()->Stop();
PdfWritingDone(0);
std::move(callback).Run(false);
return;
}
@ -113,12 +115,14 @@ void AwPrintManager::OnDidPrintDocument(
NOTREACHED() << "couldn't map";
web_contents()->Stop();
PdfWritingDone(0);
std::move(callback).Run(false);
return;
}
if (number_pages_ > printing::kMaxPageCount) {
web_contents()->Stop();
PdfWritingDone(0);
std::move(callback).Run(false);
return;
}
@ -130,18 +134,18 @@ void AwPrintManager::OnDidPrintDocument(
.get(),
FROM_HERE, base::BindOnce(&SaveDataToFd, fd_, number_pages_, data),
base::BindOnce(&AwPrintManager::OnDidPrintDocumentWritingDone,
pdf_writing_done_callback_, std::move(helper)));
pdf_writing_done_callback_, std::move(callback)));
}
// static
void AwPrintManager::OnDidPrintDocumentWritingDone(
const PdfWritingDoneCallback& callback,
std::unique_ptr<DelayedFrameDispatchHelper> helper,
DidPrintDocumentCallback did_print_document_cb,
uint32_t page_count) {
DCHECK_LE(page_count, printing::kMaxPageCount);
if (callback)
callback.Run(base::checked_cast<int>(page_count));
helper->SendCompleted();
std::move(did_print_document_cb).Run(true);
}
WEB_CONTENTS_USER_DATA_KEY_IMPL(AwPrintManager)

@ -22,6 +22,8 @@ class AwPrintManager : public printing::PrintManager,
~AwPrintManager() override;
// mojom::PrintManagerHost:
void DidPrintDocument(printing::mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) override;
void GetDefaultPrintSettings(
GetDefaultPrintSettingsCallback callback) override;
@ -41,17 +43,13 @@ class AwPrintManager : public printing::PrintManager,
explicit AwPrintManager(content::WebContents* contents);
// printing::PrintManager:
void OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const printing::mojom::DidPrintDocumentParams& params,
std::unique_ptr<DelayedFrameDispatchHelper> helper) override;
void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const printing::mojom::ScriptedPrintParams& params,
IPC::Message* reply_msg) override;
static void OnDidPrintDocumentWritingDone(
const PdfWritingDoneCallback& callback,
std::unique_ptr<DelayedFrameDispatchHelper> helper,
DidPrintDocumentCallback did_print_document_cb,
uint32_t page_count);
std::unique_ptr<printing::PrintSettings> settings_;

@ -460,49 +460,59 @@ void PrintViewManagerBase::OnComposePdfDone(
const gfx::Size& page_size,
const gfx::Rect& content_area,
const gfx::Point& physical_offsets,
std::unique_ptr<DelayedFrameDispatchHelper> helper,
DidPrintDocumentCallback callback,
mojom::PrintCompositor::Status status,
base::ReadOnlySharedMemoryRegion region) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (status != mojom::PrintCompositor::Status::kSuccess) {
DLOG(ERROR) << "Compositing pdf failed with error " << status;
std::move(callback).Run(false);
return;
}
if (!print_job_->document())
if (!print_job_->document()) {
std::move(callback).Run(false);
return;
}
scoped_refptr<base::RefCountedSharedMemoryMapping> data =
base::RefCountedSharedMemoryMapping::CreateFromWholeRegion(region);
if (!data)
if (!data) {
std::move(callback).Run(false);
return;
}
PrintDocument(data, page_size, content_area, physical_offsets);
helper->SendCompleted();
std::move(callback).Run(true);
}
void PrintViewManagerBase::OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const mojom::DidPrintDocumentParams& params,
std::unique_ptr<DelayedFrameDispatchHelper> helper) {
if (!PrintJobHasDocument(params.document_cookie))
void PrintViewManagerBase::DidPrintDocument(
mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) {
if (!PrintJobHasDocument(params->document_cookie)) {
std::move(callback).Run(false);
return;
}
const mojom::DidPrintContentParams& content = *params.content;
const mojom::DidPrintContentParams& content = *params->content;
if (!content.metafile_data_region.IsValid()) {
NOTREACHED() << "invalid memory handle";
web_contents()->Stop();
std::move(callback).Run(false);
return;
}
auto* client = PrintCompositeClient::FromWebContents(web_contents());
content::RenderFrameHost* render_frame_host =
print_manager_host_receivers_.GetCurrentTargetFrame();
if (IsOopifEnabled() && print_job_->document()->settings().is_modifiable()) {
client->DoCompositeDocumentToPdf(
params.document_cookie, render_frame_host, content,
params->document_cookie, render_frame_host, content,
base::BindOnce(&PrintViewManagerBase::OnComposePdfDone,
weak_ptr_factory_.GetWeakPtr(), params.page_size,
params.content_area, params.physical_offsets,
std::move(helper)));
weak_ptr_factory_.GetWeakPtr(), params->page_size,
params->content_area, params->physical_offsets,
std::move(callback)));
return;
}
auto data = base::RefCountedSharedMemoryMapping::CreateFromWholeRegion(
@ -510,12 +520,13 @@ void PrintViewManagerBase::OnDidPrintDocument(
if (!data) {
NOTREACHED() << "couldn't map";
web_contents()->Stop();
std::move(callback).Run(false);
return;
}
PrintDocument(data, params.page_size, params.content_area,
params.physical_offsets);
helper->SendCompleted();
PrintDocument(data, params->page_size, params->content_area,
params->physical_offsets);
std::move(callback).Run(true);
}
void PrintViewManagerBase::GetDefaultPrintSettings(

@ -77,6 +77,8 @@ class PrintViewManagerBase : public content::NotificationObserver,
// mojom::PrintManagerHost:
void DidGetPrintedPagesCount(int32_t cookie, uint32_t number_pages) override;
void DidPrintDocument(mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) override;
#if BUILDFLAG(ENABLE_TAGGED_PDF)
void SetAccessibilityTree(
int32_t cookie,
@ -133,10 +135,6 @@ class PrintViewManagerBase : public content::NotificationObserver,
void NavigationStopped() override;
// printing::PrintManager:
void OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const mojom::DidPrintDocumentParams& params,
std::unique_ptr<DelayedFrameDispatchHelper> helper) override;
void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const mojom::ScriptedPrintParams& params,
IPC::Message* reply_msg) override;
@ -145,7 +143,7 @@ class PrintViewManagerBase : public content::NotificationObserver,
void OnComposePdfDone(const gfx::Size& page_size,
const gfx::Rect& content_area,
const gfx::Point& physical_offsets,
std::unique_ptr<DelayedFrameDispatchHelper> helper,
DidPrintDocumentCallback callback,
mojom::PrintCompositor::Status status,
base::ReadOnlySharedMemoryRegion region);

@ -22,53 +22,8 @@ struct PrintManager::FrameDispatchHelper {
IPC::Message* reply_msg) {
manager->OnScriptedPrint(render_frame_host, scripted_params, reply_msg);
}
void OnDidPrintDocument(const mojom::DidPrintDocumentParams& params,
IPC::Message* reply_msg) {
// If DidPrintDocument message was received then need to transition from
// a variable allocated on stack (which has efficient memory management
// when dealing with any other incoming message) to a persistent variable
// on the heap that can be referenced by the asynchronous processing which
// occurs beyond the scope of PrintViewManagerBase::OnMessageReceived().
manager->OnDidPrintDocument(
render_frame_host, params,
std::make_unique<DelayedFrameDispatchHelper>(
manager->web_contents(), render_frame_host, reply_msg));
}
};
PrintManager::DelayedFrameDispatchHelper::DelayedFrameDispatchHelper(
content::WebContents* contents,
content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg)
: content::WebContentsObserver(contents),
render_frame_host_(render_frame_host),
reply_msg_(reply_msg) {}
PrintManager::DelayedFrameDispatchHelper::~DelayedFrameDispatchHelper() {
if (reply_msg_) {
PrintHostMsg_DidPrintDocument::WriteReplyParams(reply_msg_, false);
render_frame_host_->Send(reply_msg_);
}
}
void PrintManager::DelayedFrameDispatchHelper::SendCompleted() {
if (!reply_msg_)
return;
PrintHostMsg_DidPrintDocument::WriteReplyParams(reply_msg_, true);
render_frame_host_->Send(reply_msg_);
// This wraps up the one allowed reply for the message.
reply_msg_ = nullptr;
}
void PrintManager::DelayedFrameDispatchHelper::RenderFrameDeleted(
content::RenderFrameHost* render_frame_host) {
if (render_frame_host == render_frame_host_)
reply_msg_ = nullptr;
}
PrintManager::PrintManager(content::WebContents* contents)
: content::WebContentsObserver(contents),
print_manager_host_receivers_(contents, this) {}
@ -83,8 +38,6 @@ bool PrintManager::OnMessageReceived(
IPC_BEGIN_MESSAGE_MAP(PrintManager, message)
IPC_MESSAGE_FORWARD_DELAY_REPLY(PrintHostMsg_ScriptedPrint, &helper,
FrameDispatchHelper::OnScriptedPrint)
IPC_MESSAGE_FORWARD_DELAY_REPLY(PrintHostMsg_DidPrintDocument, &helper,
FrameDispatchHelper::OnDidPrintDocument);
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
@ -122,6 +75,11 @@ void PrintManager::UpdatePrintSettings(int32_t cookie,
void PrintManager::DidShowPrintDialog() {}
void PrintManager::DidPrintDocument(mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) {
std::move(callback).Run(false);
}
void PrintManager::ShowInvalidPrinterSettingsError() {}
void PrintManager::PrintingFailed(int32_t cookie) {

@ -47,6 +47,8 @@ class PrintManager : public content::WebContentsObserver,
// printing::mojom::PrintManagerHost:
void DidGetPrintedPagesCount(int32_t cookie, uint32_t number_pages) override;
void DidGetDocumentCookie(int32_t cookie) override;
void DidPrintDocument(mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) override;
#if BUILDFLAG(ENABLE_TAGGED_PDF)
void SetAccessibilityTree(
int32_t cookie,
@ -78,38 +80,7 @@ class PrintManager : public content::WebContentsObserver,
// IPC handling support
struct FrameDispatchHelper;
// IPC message PrintHostMsg_DidPrintDocument can require handling in other
// processes beyond the rendering process running OnMessageReceived(),
// requiring that the renderer needs to wait.
class DelayedFrameDispatchHelper : public content::WebContentsObserver {
public:
DelayedFrameDispatchHelper(content::WebContents* contents,
content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg);
DelayedFrameDispatchHelper(const DelayedFrameDispatchHelper&) = delete;
~DelayedFrameDispatchHelper() override;
DelayedFrameDispatchHelper& operator=(const DelayedFrameDispatchHelper&) =
delete;
// content::WebContentsObserver
void RenderFrameDeleted(
content::RenderFrameHost* render_frame_host) override;
// SendCompleted() can be called at most once, since it provides the success
// reply for a message. A failure reply for the message is automatically
// sent if this is never called.
void SendCompleted();
private:
content::RenderFrameHost* const render_frame_host_;
IPC::Message* reply_msg_;
};
// IPC handlers
virtual void OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const mojom::DidPrintDocumentParams& params,
std::unique_ptr<DelayedFrameDispatchHelper> helper) = 0;
virtual void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const mojom::ScriptedPrintParams& params,
IPC::Message* reply_msg) = 0;

@ -302,6 +302,12 @@ interface PrintManagerHost {
// Tells the browser that the print dialog has been shown.
DidShowPrintDialog();
// Sends back to the browser the rendered document that was requested by a
// PrintRequestedPages() or from scripted printing. Waits until the document
// is ready before replying.
[Sync]
DidPrintDocument(DidPrintDocumentParams params) => (bool completed);
// Tells the browser that there are invalid printer settings.
ShowInvalidPrinterSettingsError();

@ -267,15 +267,6 @@ IPC_STRUCT_TRAITS_END()
// Messages sent from the renderer to the browser.
// Sends back to the browser the rendered document that was requested by a
// PrintMsg_PrintPages message or from scripted printing. The memory handle in
// this message is already valid in the browser process. Waits until the
// document is complete ready before replying.
IPC_SYNC_MESSAGE_ROUTED1_1(PrintHostMsg_DidPrintDocument,
printing::mojom::DidPrintDocumentParams
/* page content */,
bool /* completed */)
// It's the renderer that controls the printing process when it is generated
// by javascript. This step is about showing UI to the user to select the
// final print settings. The output parameter is the same as

@ -2010,13 +2010,14 @@ bool PrintRenderFrameHelper::PrintPagesNative(blink::WebLocalFrame* frame,
snapshotter->Snapshot(ui::AXMode::kPDF, 0, &metafile.accessibility_tree());
}
mojom::DidPrintDocumentParams page_params;
page_params.content = mojom::DidPrintContentParams::New();
mojom::DidPrintDocumentParamsPtr page_params =
mojom::DidPrintDocumentParams::New();
page_params->content = mojom::DidPrintContentParams::New();
gfx::Size* page_size_in_dpi;
gfx::Rect* content_area_in_dpi;
#if defined(OS_APPLE) || defined(OS_WIN)
page_size_in_dpi = &page_params.page_size;
content_area_in_dpi = &page_params.content_area;
page_size_in_dpi = &page_params->page_size;
content_area_in_dpi = &page_params->content_area;
#else
page_size_in_dpi = nullptr;
content_area_in_dpi = nullptr;
@ -2036,17 +2037,16 @@ bool PrintRenderFrameHelper::PrintPagesNative(blink::WebLocalFrame* frame,
metafile.FinishDocument();
if (!CopyMetafileDataToReadOnlySharedMem(metafile,
page_params.content.get())) {
page_params->content.get())) {
return false;
}
page_params.document_cookie = print_params.document_cookie;
page_params->document_cookie = print_params.document_cookie;
#if defined(OS_WIN)
page_params.physical_offsets = printer_printable_area_.origin();
page_params->physical_offsets = printer_printable_area_.origin();
#endif
bool completed = false;
Send(
new PrintHostMsg_DidPrintDocument(routing_id(), page_params, &completed));
GetPrintManagerHost()->DidPrintDocument(std::move(page_params), &completed);
return completed;
}

@ -204,18 +204,17 @@ void MockPrinter::SetPrintedPagesCount(int cookie, uint32_t number_pages) {
pages_.clear();
}
void MockPrinter::PrintPage(
const printing::mojom::DidPrintDocumentParams& params) {
void MockPrinter::PrintPage(printing::mojom::DidPrintDocumentParamsPtr params) {
// Verify the input parameter and update the printer status so that the
// RenderViewTest class can verify the this function finishes without errors.
EXPECT_EQ(PRINTER_PRINTING, printer_status_);
EXPECT_EQ(document_cookie_, params.document_cookie);
EXPECT_EQ(document_cookie_, params->document_cookie);
#if defined(OS_WIN) || defined(OS_APPLE)
// Load the data sent from a RenderView object and create a PageData object.
ASSERT_TRUE(params.content->metafile_data_region.IsValid());
ASSERT_TRUE(params->content->metafile_data_region.IsValid());
base::ReadOnlySharedMemoryMapping mapping =
params.content->metafile_data_region.Map();
params->content->metafile_data_region.Map();
ASSERT_TRUE(mapping.IsValid());
EXPECT_GT(mapping.size(), 0U);

@ -89,7 +89,7 @@ class MockPrinter {
int margins_type,
const gfx::Size& page_size,
int scale_factor);
void PrintPage(const printing::mojom::DidPrintDocumentParams& params);
void PrintPage(printing::mojom::DidPrintDocumentParamsPtr params);
// Functions that retrieve the output pages.
Status GetPrinterStatus() const { return printer_status_; }

@ -51,8 +51,6 @@ bool PrintMockRenderThread::OnMessageReceived(const IPC::Message& msg) {
IPC_BEGIN_MESSAGE_MAP(PrintMockRenderThread, msg)
#if BUILDFLAG(ENABLE_PRINTING)
IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_ScriptedPrint, OnScriptedPrint)
IPC_MESSAGE_HANDLER_DELAY_REPLY(PrintHostMsg_DidPrintDocument,
OnDidPrintDocument)
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidStartPreview, OnDidStartPreview)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidPreviewPage, OnDidPreviewPage)
@ -79,14 +77,6 @@ void PrintMockRenderThread::OnScriptedPrint(
Send(reply_msg);
}
void PrintMockRenderThread::OnDidPrintDocument(
const printing::mojom::DidPrintDocumentParams& params,
IPC::Message* reply_msg) {
printer_->PrintPage(params);
PrintHostMsg_DidPrintDocument::WriteReplyParams(reply_msg, true);
Send(reply_msg);
}
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
void PrintMockRenderThread::OnDidStartPreview(
const printing::mojom::DidStartPreviewParams& params,

@ -67,9 +67,6 @@ class PrintMockRenderThread : public content::MockRenderThread {
// PrintRenderFrameHelper expects final print settings from the user.
void OnScriptedPrint(const printing::mojom::ScriptedPrintParams& params,
IPC::Message* reply_msg);
void OnDidPrintDocument(const printing::mojom::DidPrintDocumentParams& params,
IPC::Message* reply_msg);
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
void OnDidStartPreview(const printing::mojom::DidStartPreviewParams& params,
const printing::mojom::PreviewIds& ids);

@ -230,6 +230,13 @@ class TestPrintManagerHost
printer_->SetPrintedPagesCount(cookie, number_pages);
}
void DidGetDocumentCookie(int32_t cookie) override {}
void DidPrintDocument(mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) override {
base::RunLoop().RunUntilIdle();
printer_->PrintPage(std::move(params));
std::move(callback).Run(true);
is_printed_ = true;
}
void GetDefaultPrintSettings(
GetDefaultPrintSettingsCallback callback) override {
printing::mojom::PrintParamsPtr params =
@ -325,6 +332,7 @@ class TestPrintManagerHost
void DidShowPrintDialog() override {}
bool IsPrinted() { return is_printed_; }
void SetExpectedPagesCount(uint32_t number_pages) {
number_pages_ = number_pages;
}
@ -354,6 +362,7 @@ class TestPrintManagerHost
}
uint32_t number_pages_ = 0;
bool is_printed_ = false;
MockPrinter* printer_;
base::OnceClosure quit_closure_;
mojo::AssociatedReceiver<mojom::PrintManagerHost> receiver_{this};
@ -435,12 +444,11 @@ class PrintRenderFrameHelperTestBase : public content::RenderViewTest {
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
// Verifies whether the pages printed or not.
void VerifyPagesPrinted(bool expect_printed) {
const IPC::Message* print_msg =
render_thread_->sink().GetUniqueMessageMatching(
PrintHostMsg_DidPrintDocument::ID);
bool did_print = !!print_msg;
ASSERT_EQ(expect_printed, did_print);
void VerifyPagesPrinted(bool expect_printed,
content::RenderFrame* render_frame = nullptr) {
if (!render_frame)
render_frame = content::RenderFrame::FromWebFrame(GetMainFrame());
ASSERT_EQ(expect_printed, print_manager(render_frame)->IsPrinted());
}
void OnPrintPages() {
@ -547,9 +555,10 @@ class PrintRenderFrameHelperTestBase : public content::RenderViewTest {
}
PrintMockRenderThread* print_render_thread() { return print_render_thread_; }
TestPrintManagerHost* print_manager() {
auto it = frame_to_print_manager_map_.find(
content::RenderFrame::FromWebFrame(GetMainFrame()));
TestPrintManagerHost* print_manager(content::RenderFrame* frame = nullptr) {
if (!frame)
frame = content::RenderFrame::FromWebFrame(GetMainFrame());
auto it = frame_to_print_manager_map_.find(frame);
return it->second.get();
}
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
@ -693,9 +702,11 @@ TEST_F(MAYBE_PrintRenderFrameHelperTest, BasicBeforePrintAfterPrintSubFrame) {
"</body>";
LoadHTML(kCloseOnBeforeHtml);
content::RenderFrame* sub_render_frame = content::RenderFrame::FromWebFrame(
GetMainFrame()->FindFrameByName("sub")->ToWebLocalFrame());
OnPrintPagesInFrame("sub");
EXPECT_EQ(nullptr, GetMainFrame()->FindFrameByName("sub"));
VerifyPagesPrinted(false);
VerifyPagesPrinted(false, sub_render_frame);
ClearPrintManagerHost();
@ -707,9 +718,11 @@ TEST_F(MAYBE_PrintRenderFrameHelperTest, BasicBeforePrintAfterPrintSubFrame) {
"</body>";
LoadHTML(kCloseOnAfterHtml);
sub_render_frame = content::RenderFrame::FromWebFrame(
GetMainFrame()->FindFrameByName("sub")->ToWebLocalFrame());
OnPrintPagesInFrame("sub");
EXPECT_EQ(nullptr, GetMainFrame()->FindFrameByName("sub"));
VerifyPagesPrinted(true);
VerifyPagesPrinted(true, sub_render_frame);
}
#if defined(OS_APPLE)

@ -259,22 +259,23 @@ void HeadlessPrintManager::PrintingFailed(int32_t cookie) {
ReleaseJob(PRINTING_FAILED);
}
void HeadlessPrintManager::OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const printing::mojom::DidPrintDocumentParams& params,
std::unique_ptr<DelayedFrameDispatchHelper> helper) {
auto& content = *params.content;
void HeadlessPrintManager::DidPrintDocument(
printing::mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) {
auto& content = *params->content;
if (!content.metafile_data_region.IsValid()) {
ReleaseJob(INVALID_MEMORY_HANDLE);
std::move(callback).Run(false);
return;
}
base::ReadOnlySharedMemoryMapping map = content.metafile_data_region.Map();
if (!map.IsValid()) {
ReleaseJob(METAFILE_MAP_ERROR);
std::move(callback).Run(false);
return;
}
data_ = std::string(static_cast<const char*>(map.memory()), map.size());
helper->SendCompleted();
std::move(callback).Run(true);
ReleaseJob(PRINT_SUCCESS);
}

@ -95,15 +95,13 @@ class HeadlessPrintManager
content::RenderFrameHost* render_frame_host) override;
// printing::PrintManager:
void OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const printing::mojom::DidPrintDocumentParams& params,
std::unique_ptr<DelayedFrameDispatchHelper> helper) override;
void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const printing::mojom::ScriptedPrintParams& params,
IPC::Message* reply_msg) override;
// printing::mojom::PrintManagerHost:
void DidPrintDocument(printing::mojom::DidPrintDocumentParamsPtr params,
DidPrintDocumentCallback callback) override;
void GetDefaultPrintSettings(
GetDefaultPrintSettingsCallback callback) override;
void ShowInvalidPrinterSettingsError() override;