Commit 2c740704 authored by Alan Screen's avatar Alan Screen Committed by Commit Bot

Cleanup: consolidate print frame dispatchers

Classes derived from printing::PrintManager each process a similar set
of messages, such as DidPrintDocument, GetDefaultPrintSettings, and
ScriptedPrint.  The framework necessary for handling these is very
similar across the classes, even if some of the classes need to do
something different for some particular message.

Simplify the code by pushing this common framework into the base class
printing::PrintManager.

Broken out of work to resolve a printing issue when print preview is
disabled in [1].

[1] https://crrev.com/c/1700275

Bug: 974480
Change-Id: If5a6a2f100900d9261f7c396f6bec55f299fea3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1714807Reviewed-by: default avatarTao Bai <michaelbai@chromium.org>
Reviewed-by: default avatarAndrey Kosyakov <caseq@chromium.org>
Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/master@{#683009}
parent 8fec29bb
......@@ -33,22 +33,6 @@ int SaveDataToFd(int fd,
} // namespace
struct AwPrintManager::FrameDispatchHelper {
AwPrintManager* manager;
content::RenderFrameHost* render_frame_host;
bool Send(IPC::Message* msg) { return render_frame_host->Send(msg); }
void OnGetDefaultPrintSettings(IPC::Message* reply_msg) {
manager->OnGetDefaultPrintSettings(render_frame_host, reply_msg);
}
void OnScriptedPrint(const PrintHostMsg_ScriptedPrint_Params& scripted_params,
IPC::Message* reply_msg) {
manager->OnScriptedPrint(render_frame_host, scripted_params, reply_msg);
}
};
// static
AwPrintManager* AwPrintManager::CreateForWebContents(
content::WebContents* contents,
......@@ -85,23 +69,6 @@ bool AwPrintManager::PrintNow() {
return rfh->Send(new PrintMsg_PrintPages(rfh->GetRoutingID()));
}
bool AwPrintManager::OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) {
FrameDispatchHelper helper = {this, render_frame_host};
bool handled = true;
IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(AwPrintManager, message, render_frame_host)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidPrintDocument, OnDidPrintDocument)
IPC_MESSAGE_FORWARD_DELAY_REPLY(
PrintHostMsg_GetDefaultPrintSettings, &helper,
FrameDispatchHelper::OnGetDefaultPrintSettings)
IPC_MESSAGE_FORWARD_DELAY_REPLY(PrintHostMsg_ScriptedPrint, &helper,
FrameDispatchHelper::OnScriptedPrint)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled || PrintManager::OnMessageReceived(message, render_frame_host);
}
void AwPrintManager::OnGetDefaultPrintSettings(
content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg) {
......
......@@ -34,7 +34,6 @@ class AwPrintManager : public printing::PrintManager,
private:
friend class content::WebContentsUserData<AwPrintManager>;
struct FrameDispatchHelper;
AwPrintManager(content::WebContents* contents,
const printing::PrintSettings& settings,
......@@ -42,17 +41,14 @@ class AwPrintManager : public printing::PrintManager,
PdfWritingDoneCallback callback);
// printing::PrintManager:
bool OnMessageReceived(const IPC::Message& message,
content::RenderFrameHost* render_frame_host) override;
// IPC Handlers
void OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params) override;
void OnGetDefaultPrintSettings(content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg);
IPC::Message* reply_msg) override;
void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg);
void OnDidPrintDocument(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params);
IPC::Message* reply_msg) override;
printing::PrintSettings settings_;
......
......@@ -334,6 +334,12 @@ void PrintViewManagerBase::OnDidPrintDocument(
params.physical_offsets);
}
void PrintViewManagerBase::OnGetDefaultPrintSettings(
content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg) {
NOTREACHED() << "should be handled by printing::PrintingMessageFilter";
}
void PrintViewManagerBase::OnPrintingFailed(int cookie) {
PrintManager::OnPrintingFailed(cookie);
......@@ -349,6 +355,13 @@ void PrintViewManagerBase::OnPrintingFailed(int cookie) {
content::NotificationService::NoDetails());
}
void PrintViewManagerBase::OnScriptedPrint(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg) {
NOTREACHED() << "should be handled by printing:: PrintingMessageFilter";
}
void PrintViewManagerBase::OnShowInvalidPrinterSettingsError() {
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&ShowWarningMessageBox,
......@@ -401,15 +414,6 @@ bool PrintViewManagerBase::OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(PrintViewManagerBase, message,
render_frame_host)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidPrintDocument, OnDidPrintDocument)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
if (handled)
return true;
handled = true;
IPC_BEGIN_MESSAGE_MAP(PrintViewManagerBase, message)
IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError,
OnShowInvalidPrinterSettingsError)
......
......@@ -22,16 +22,10 @@
#include "content/public/browser/notification_registrar.h"
#include "printing/buildflags/buildflags.h"
struct PrintHostMsg_DidPrintDocument_Params;
namespace base {
class RefCountedMemory;
}
namespace content {
class RenderFrameHost;
}
namespace printing {
class JobEventDetails;
......@@ -107,12 +101,19 @@ class PrintViewManagerBase : public content::NotificationObserver,
// Cancels the print job.
void NavigationStopped() override;
// IPC Message handlers.
// printing::PrintManager:
void OnDidGetPrintedPagesCount(int cookie, int number_pages) override;
void OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params) override;
void OnGetDefaultPrintSettings(content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg) override;
void OnPrintingFailed(int cookie) override;
void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg) override;
void OnShowInvalidPrinterSettingsError();
void OnDidPrintDocument(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params);
// IPC message handlers for service.
void OnComposePdfDone(const gfx::Size& page_size,
......
......@@ -6,9 +6,26 @@
#include "build/build_config.h"
#include "components/printing/common/print_messages.h"
#include "content/public/browser/render_frame_host.h"
namespace printing {
struct PrintManager::FrameDispatchHelper {
PrintManager* manager;
content::RenderFrameHost* render_frame_host;
bool Send(IPC::Message* msg) { return render_frame_host->Send(msg); }
void OnGetDefaultPrintSettings(IPC::Message* reply_msg) {
manager->OnGetDefaultPrintSettings(render_frame_host, reply_msg);
}
void OnScriptedPrint(const PrintHostMsg_ScriptedPrint_Params& scripted_params,
IPC::Message* reply_msg) {
manager->OnScriptedPrint(render_frame_host, scripted_params, reply_msg);
}
};
PrintManager::PrintManager(content::WebContents* contents)
: content::WebContentsObserver(contents) {}
......@@ -18,11 +35,26 @@ bool PrintManager::OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(PrintManager, message, render_frame_host)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidPrintDocument, OnDidPrintDocument)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
if (handled)
return true;
handled = true;
FrameDispatchHelper helper = {this, render_frame_host};
IPC_BEGIN_MESSAGE_MAP(PrintManager, message)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetPrintedPagesCount,
OnDidGetPrintedPagesCount)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetDocumentCookie,
OnDidGetDocumentCookie)
IPC_MESSAGE_FORWARD_DELAY_REPLY(
PrintHostMsg_GetDefaultPrintSettings, &helper,
FrameDispatchHelper::OnGetDefaultPrintSettings)
IPC_MESSAGE_FORWARD_DELAY_REPLY(PrintHostMsg_ScriptedPrint, &helper,
FrameDispatchHelper::OnScriptedPrint)
IPC_MESSAGE_HANDLER(PrintHostMsg_PrintingFailed, OnPrintingFailed)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
......
......@@ -13,6 +13,9 @@
#include "base/callback.h"
#endif
struct PrintHostMsg_DidPrintDocument_Params;
struct PrintHostMsg_ScriptedPrint_Params;
namespace printing {
class PrintManager : public content::WebContentsObserver {
......@@ -36,9 +39,21 @@ class PrintManager : public content::WebContentsObserver {
bool OnMessageReceived(const IPC::Message& message,
content::RenderFrameHost* render_frame_host) override;
// IPC handling support
struct FrameDispatchHelper;
// IPC handlers
virtual void OnDidGetPrintedPagesCount(int cookie, int number_pages);
virtual void OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params) = 0;
virtual void OnGetDefaultPrintSettings(
content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg) = 0;
virtual void OnPrintingFailed(int cookie);
virtual void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg) = 0;
int number_pages_ = 0; // Number of pages to print in the print job.
int cookie_ = 0; // The current document cookie.
......
......@@ -21,22 +21,6 @@
namespace headless {
struct HeadlessPrintManager::FrameDispatchHelper {
HeadlessPrintManager* manager;
content::RenderFrameHost* render_frame_host;
bool Send(IPC::Message* msg) { return render_frame_host->Send(msg); }
void OnGetDefaultPrintSettings(IPC::Message* reply_msg) {
manager->OnGetDefaultPrintSettings(reply_msg);
}
void OnScriptedPrint(const PrintHostMsg_ScriptedPrint_Params& scripted_params,
IPC::Message* reply_msg) {
manager->OnScriptedPrint(scripted_params, reply_msg);
}
};
HeadlessPrintSettings::HeadlessPrintSettings()
: prefer_css_page_size(false),
landscape(false),
......@@ -226,34 +210,34 @@ bool HeadlessPrintManager::OnMessageReceived(
return true;
}
FrameDispatchHelper helper = {this, render_frame_host};
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(HeadlessPrintManager, message)
IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError,
OnShowInvalidPrinterSettingsError)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidPrintDocument, OnDidPrintDocument)
IPC_MESSAGE_FORWARD_DELAY_REPLY(
PrintHostMsg_GetDefaultPrintSettings, &helper,
FrameDispatchHelper::OnGetDefaultPrintSettings)
IPC_MESSAGE_FORWARD_DELAY_REPLY(PrintHostMsg_ScriptedPrint, &helper,
FrameDispatchHelper::OnScriptedPrint)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled || PrintManager::OnMessageReceived(message, render_frame_host);
}
void HeadlessPrintManager::OnGetDefaultPrintSettings(IPC::Message* reply_msg) {
void HeadlessPrintManager::OnGetDefaultPrintSettings(
content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg) {
PrintHostMsg_GetDefaultPrintSettings::WriteReplyParams(reply_msg,
print_params_->params);
// Intentionally using |printing_rfh_| instead of |render_frame_host|
// parameter.
printing_rfh_->Send(reply_msg);
}
void HeadlessPrintManager::OnScriptedPrint(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg) {
PageRangeStatus status =
PageRangeTextToPages(page_ranges_text_, ignore_invalid_page_ranges_,
params.expected_pages_count, &print_params_->pages);
// Intentionally using |printing_rfh_| instead of |render_frame_host|
// parameter.
switch (status) {
case SYNTAX_ERROR:
printing_rfh_->Send(reply_msg);
......@@ -282,6 +266,7 @@ void HeadlessPrintManager::OnPrintingFailed(int cookie) {
}
void HeadlessPrintManager::OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params) {
auto& content = params.content;
if (!content.metafile_data_region.IsValid()) {
......
......@@ -97,14 +97,18 @@ class HeadlessPrintManager
bool OnMessageReceived(const IPC::Message& message,
content::RenderFrameHost* render_frame_host) override;
// IPC Message handlers.
struct FrameDispatchHelper;
void OnGetDefaultPrintSettings(IPC::Message* reply_msg);
void OnScriptedPrint(const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg);
void OnShowInvalidPrinterSettingsError();
// printing::PrintManager:
void OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params) override;
void OnGetDefaultPrintSettings(content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg) override;
void OnPrintingFailed(int cookie) override;
void OnDidPrintDocument(const PrintHostMsg_DidPrintDocument_Params& params);
void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg) override;
void OnShowInvalidPrinterSettingsError();
void Reset();
void ReleaseJob(PrintResult result);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment