blob: d48bb254c05e4350a945a4eae21a610fdaa7aba6 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/printing/browser/headless/headless_print_manager.h"
#include "components/printing/browser/print_to_pdf/pdf_print_result.h"
#include "printing/mojom/print.mojom.h"
#include "printing/printing_utils.h"
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
#include "mojo/public/cpp/bindings/message.h"
#endif
namespace headless {
namespace {
#if BUILDFLAG(ENABLE_PRINT_PREVIEW) || BUILDFLAG(ENABLE_TAGGED_PDF)
constexpr char kUnexpectedPrintManagerCall[] =
"Headless Print Manager: Unexpected Print Manager call";
#endif
} // namespace
HeadlessPrintManager::HeadlessPrintManager(content::WebContents* web_contents)
: printing::PrintManager(web_contents),
content::WebContentsUserData<HeadlessPrintManager>(*web_contents) {}
HeadlessPrintManager::~HeadlessPrintManager() = default;
// static
void HeadlessPrintManager::BindPrintManagerHost(
mojo::PendingAssociatedReceiver<printing::mojom::PrintManagerHost> receiver,
content::RenderFrameHost* rfh) {
auto* web_contents = content::WebContents::FromRenderFrameHost(rfh);
if (!web_contents)
return;
auto* print_manager = HeadlessPrintManager::FromWebContents(web_contents);
if (!print_manager)
return;
print_manager->BindReceiver(std::move(receiver), rfh);
}
void HeadlessPrintManager::PrintToPdf(
content::RenderFrameHost* rfh,
const std::string& page_ranges,
printing::mojom::PrintPagesParamsPtr print_pages_params,
print_to_pdf::PdfPrintJob::PrintToPdfCallback callback) {
print_to_pdf::PdfPrintJob::StartJob(
web_contents(), rfh, GetPrintRenderFrame(rfh), page_ranges,
std::move(print_pages_params), std::move(callback));
}
void HeadlessPrintManager::GetDefaultPrintSettings(
GetDefaultPrintSettingsCallback callback) {
DLOG(ERROR) << "Scripted print is not supported";
std::move(callback).Run(nullptr);
}
void HeadlessPrintManager::ScriptedPrint(
printing::mojom::ScriptedPrintParamsPtr params,
ScriptedPrintCallback callback) {
DLOG(ERROR) << "Scripted print is not supported";
std::move(callback).Run(nullptr);
}
#if BUILDFLAG(ENABLE_PRINT_PREVIEW)
void HeadlessPrintManager::UpdatePrintSettings(
base::Value::Dict job_settings,
UpdatePrintSettingsCallback callback) {
mojo::ReportBadMessage(kUnexpectedPrintManagerCall);
}
void HeadlessPrintManager::SetupScriptedPrintPreview(
SetupScriptedPrintPreviewCallback callback) {
DLOG(ERROR) << "Scripted print preview is not supported";
std::move(callback).Run();
}
void HeadlessPrintManager::ShowScriptedPrintPreview(bool source_is_modifiable) {
DLOG(ERROR) << "Scripted print preview is not supported";
}
void HeadlessPrintManager::RequestPrintPreview(
printing::mojom::RequestPrintPreviewParamsPtr params) {
mojo::ReportBadMessage(kUnexpectedPrintManagerCall);
}
void HeadlessPrintManager::CheckForCancel(int32_t preview_ui_id,
int32_t request_id,
CheckForCancelCallback callback) {
mojo::ReportBadMessage(kUnexpectedPrintManagerCall);
}
#endif // BUILDFLAG(ENABLE_PRINT_PREVIEW)
#if BUILDFLAG(ENABLE_TAGGED_PDF)
void HeadlessPrintManager::SetAccessibilityTree(
int32_t cookie,
const ui::AXTreeUpdate& accessibility_tree) {
mojo::ReportBadMessage(kUnexpectedPrintManagerCall);
}
#endif
#if BUILDFLAG(IS_ANDROID)
void HeadlessPrintManager::PdfWritingDone(int page_count) {}
#endif
WEB_CONTENTS_USER_DATA_KEY_IMPL(HeadlessPrintManager);
} // namespace headless