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, ...@@ -33,22 +33,6 @@ int SaveDataToFd(int fd,
} // namespace } // 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 // static
AwPrintManager* AwPrintManager::CreateForWebContents( AwPrintManager* AwPrintManager::CreateForWebContents(
content::WebContents* contents, content::WebContents* contents,
...@@ -85,23 +69,6 @@ bool AwPrintManager::PrintNow() { ...@@ -85,23 +69,6 @@ bool AwPrintManager::PrintNow() {
return rfh->Send(new PrintMsg_PrintPages(rfh->GetRoutingID())); 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( void AwPrintManager::OnGetDefaultPrintSettings(
content::RenderFrameHost* render_frame_host, content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg) { IPC::Message* reply_msg) {
......
...@@ -34,7 +34,6 @@ class AwPrintManager : public printing::PrintManager, ...@@ -34,7 +34,6 @@ class AwPrintManager : public printing::PrintManager,
private: private:
friend class content::WebContentsUserData<AwPrintManager>; friend class content::WebContentsUserData<AwPrintManager>;
struct FrameDispatchHelper;
AwPrintManager(content::WebContents* contents, AwPrintManager(content::WebContents* contents,
const printing::PrintSettings& settings, const printing::PrintSettings& settings,
...@@ -42,17 +41,14 @@ class AwPrintManager : public printing::PrintManager, ...@@ -42,17 +41,14 @@ class AwPrintManager : public printing::PrintManager,
PdfWritingDoneCallback callback); PdfWritingDoneCallback callback);
// printing::PrintManager: // printing::PrintManager:
bool OnMessageReceived(const IPC::Message& message, void OnDidPrintDocument(
content::RenderFrameHost* render_frame_host) override; content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params) override;
// IPC Handlers
void OnGetDefaultPrintSettings(content::RenderFrameHost* render_frame_host, void OnGetDefaultPrintSettings(content::RenderFrameHost* render_frame_host,
IPC::Message* reply_msg); IPC::Message* reply_msg) override;
void OnScriptedPrint(content::RenderFrameHost* render_frame_host, void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_ScriptedPrint_Params& params, const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg); IPC::Message* reply_msg) override;
void OnDidPrintDocument(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params);
printing::PrintSettings settings_; printing::PrintSettings settings_;
......
...@@ -334,6 +334,12 @@ void PrintViewManagerBase::OnDidPrintDocument( ...@@ -334,6 +334,12 @@ void PrintViewManagerBase::OnDidPrintDocument(
params.physical_offsets); 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) { void PrintViewManagerBase::OnPrintingFailed(int cookie) {
PrintManager::OnPrintingFailed(cookie); PrintManager::OnPrintingFailed(cookie);
...@@ -349,6 +355,13 @@ void PrintViewManagerBase::OnPrintingFailed(int cookie) { ...@@ -349,6 +355,13 @@ void PrintViewManagerBase::OnPrintingFailed(int cookie) {
content::NotificationService::NoDetails()); 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() { void PrintViewManagerBase::OnShowInvalidPrinterSettingsError() {
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(&ShowWarningMessageBox, FROM_HERE, base::BindOnce(&ShowWarningMessageBox,
...@@ -401,15 +414,6 @@ bool PrintViewManagerBase::OnMessageReceived( ...@@ -401,15 +414,6 @@ bool PrintViewManagerBase::OnMessageReceived(
const IPC::Message& message, const IPC::Message& message,
content::RenderFrameHost* render_frame_host) { content::RenderFrameHost* render_frame_host) {
bool handled = true; 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_BEGIN_MESSAGE_MAP(PrintViewManagerBase, message)
IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError, IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError,
OnShowInvalidPrinterSettingsError) OnShowInvalidPrinterSettingsError)
......
...@@ -22,16 +22,10 @@ ...@@ -22,16 +22,10 @@
#include "content/public/browser/notification_registrar.h" #include "content/public/browser/notification_registrar.h"
#include "printing/buildflags/buildflags.h" #include "printing/buildflags/buildflags.h"
struct PrintHostMsg_DidPrintDocument_Params;
namespace base { namespace base {
class RefCountedMemory; class RefCountedMemory;
} }
namespace content {
class RenderFrameHost;
}
namespace printing { namespace printing {
class JobEventDetails; class JobEventDetails;
...@@ -107,12 +101,19 @@ class PrintViewManagerBase : public content::NotificationObserver, ...@@ -107,12 +101,19 @@ class PrintViewManagerBase : public content::NotificationObserver,
// Cancels the print job. // Cancels the print job.
void NavigationStopped() override; void NavigationStopped() override;
// IPC Message handlers. // printing::PrintManager:
void OnDidGetPrintedPagesCount(int cookie, int number_pages) override; 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 OnPrintingFailed(int cookie) override;
void OnScriptedPrint(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg) override;
void OnShowInvalidPrinterSettingsError(); void OnShowInvalidPrinterSettingsError();
void OnDidPrintDocument(content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params);
// IPC message handlers for service. // IPC message handlers for service.
void OnComposePdfDone(const gfx::Size& page_size, void OnComposePdfDone(const gfx::Size& page_size,
......
...@@ -6,9 +6,26 @@ ...@@ -6,9 +6,26 @@
#include "build/build_config.h" #include "build/build_config.h"
#include "components/printing/common/print_messages.h" #include "components/printing/common/print_messages.h"
#include "content/public/browser/render_frame_host.h"
namespace printing { 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) PrintManager::PrintManager(content::WebContents* contents)
: content::WebContentsObserver(contents) {} : content::WebContentsObserver(contents) {}
...@@ -18,11 +35,26 @@ bool PrintManager::OnMessageReceived( ...@@ -18,11 +35,26 @@ bool PrintManager::OnMessageReceived(
const IPC::Message& message, const IPC::Message& message,
content::RenderFrameHost* render_frame_host) { content::RenderFrameHost* render_frame_host) {
bool handled = true; 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_BEGIN_MESSAGE_MAP(PrintManager, message)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetPrintedPagesCount, IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetPrintedPagesCount,
OnDidGetPrintedPagesCount) OnDidGetPrintedPagesCount)
IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetDocumentCookie, IPC_MESSAGE_HANDLER(PrintHostMsg_DidGetDocumentCookie,
OnDidGetDocumentCookie) 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_HANDLER(PrintHostMsg_PrintingFailed, OnPrintingFailed)
IPC_MESSAGE_UNHANDLED(handled = false) IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP() IPC_END_MESSAGE_MAP()
......
...@@ -13,6 +13,9 @@ ...@@ -13,6 +13,9 @@
#include "base/callback.h" #include "base/callback.h"
#endif #endif
struct PrintHostMsg_DidPrintDocument_Params;
struct PrintHostMsg_ScriptedPrint_Params;
namespace printing { namespace printing {
class PrintManager : public content::WebContentsObserver { class PrintManager : public content::WebContentsObserver {
...@@ -36,9 +39,21 @@ class PrintManager : public content::WebContentsObserver { ...@@ -36,9 +39,21 @@ class PrintManager : public content::WebContentsObserver {
bool OnMessageReceived(const IPC::Message& message, bool OnMessageReceived(const IPC::Message& message,
content::RenderFrameHost* render_frame_host) override; content::RenderFrameHost* render_frame_host) override;
// IPC handling support
struct FrameDispatchHelper;
// IPC handlers // IPC handlers
virtual void OnDidGetPrintedPagesCount(int cookie, int number_pages); 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 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 number_pages_ = 0; // Number of pages to print in the print job.
int cookie_ = 0; // The current document cookie. int cookie_ = 0; // The current document cookie.
......
...@@ -21,22 +21,6 @@ ...@@ -21,22 +21,6 @@
namespace headless { 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() HeadlessPrintSettings::HeadlessPrintSettings()
: prefer_css_page_size(false), : prefer_css_page_size(false),
landscape(false), landscape(false),
...@@ -226,34 +210,34 @@ bool HeadlessPrintManager::OnMessageReceived( ...@@ -226,34 +210,34 @@ bool HeadlessPrintManager::OnMessageReceived(
return true; return true;
} }
FrameDispatchHelper helper = {this, render_frame_host};
bool handled = true; bool handled = true;
IPC_BEGIN_MESSAGE_MAP(HeadlessPrintManager, message) IPC_BEGIN_MESSAGE_MAP(HeadlessPrintManager, message)
IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError, IPC_MESSAGE_HANDLER(PrintHostMsg_ShowInvalidPrinterSettingsError,
OnShowInvalidPrinterSettingsError) 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_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP() IPC_END_MESSAGE_MAP()
return handled || PrintManager::OnMessageReceived(message, render_frame_host); 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, PrintHostMsg_GetDefaultPrintSettings::WriteReplyParams(reply_msg,
print_params_->params); print_params_->params);
// Intentionally using |printing_rfh_| instead of |render_frame_host|
// parameter.
printing_rfh_->Send(reply_msg); printing_rfh_->Send(reply_msg);
} }
void HeadlessPrintManager::OnScriptedPrint( void HeadlessPrintManager::OnScriptedPrint(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_ScriptedPrint_Params& params, const PrintHostMsg_ScriptedPrint_Params& params,
IPC::Message* reply_msg) { IPC::Message* reply_msg) {
PageRangeStatus status = PageRangeStatus status =
PageRangeTextToPages(page_ranges_text_, ignore_invalid_page_ranges_, PageRangeTextToPages(page_ranges_text_, ignore_invalid_page_ranges_,
params.expected_pages_count, &print_params_->pages); params.expected_pages_count, &print_params_->pages);
// Intentionally using |printing_rfh_| instead of |render_frame_host|
// parameter.
switch (status) { switch (status) {
case SYNTAX_ERROR: case SYNTAX_ERROR:
printing_rfh_->Send(reply_msg); printing_rfh_->Send(reply_msg);
...@@ -282,6 +266,7 @@ void HeadlessPrintManager::OnPrintingFailed(int cookie) { ...@@ -282,6 +266,7 @@ void HeadlessPrintManager::OnPrintingFailed(int cookie) {
} }
void HeadlessPrintManager::OnDidPrintDocument( void HeadlessPrintManager::OnDidPrintDocument(
content::RenderFrameHost* render_frame_host,
const PrintHostMsg_DidPrintDocument_Params& params) { const PrintHostMsg_DidPrintDocument_Params& params) {
auto& content = params.content; auto& content = params.content;
if (!content.metafile_data_region.IsValid()) { if (!content.metafile_data_region.IsValid()) {
......
...@@ -97,14 +97,18 @@ class HeadlessPrintManager ...@@ -97,14 +97,18 @@ class HeadlessPrintManager
bool OnMessageReceived(const IPC::Message& message, bool OnMessageReceived(const IPC::Message& message,
content::RenderFrameHost* render_frame_host) override; content::RenderFrameHost* render_frame_host) override;
// IPC Message handlers. // printing::PrintManager:
struct FrameDispatchHelper; void OnDidPrintDocument(
void OnGetDefaultPrintSettings(IPC::Message* reply_msg); content::RenderFrameHost* render_frame_host,
void OnScriptedPrint(const PrintHostMsg_ScriptedPrint_Params& params, const PrintHostMsg_DidPrintDocument_Params& params) override;
IPC::Message* reply_msg); void OnGetDefaultPrintSettings(content::RenderFrameHost* render_frame_host,
void OnShowInvalidPrinterSettingsError(); IPC::Message* reply_msg) override;
void OnPrintingFailed(int cookie) 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 Reset();
void ReleaseJob(PrintResult result); 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