Index: chrome/utility/printing_handler.cc |
diff --git a/chrome/utility/printing_handler.cc b/chrome/utility/printing_handler.cc |
index 7dbae1a132df5b38ba8e615c28545bf39148fbd2..71974aa2128e8c47ee784f861eacb94e28a2c0ad 100644 |
--- a/chrome/utility/printing_handler.cc |
+++ b/chrome/utility/printing_handler.cc |
@@ -10,10 +10,12 @@ |
#include "base/files/file_util.h" |
#include "build/build_config.h" |
#include "chrome/common/chrome_paths.h" |
-#include "chrome/common/chrome_utility_printing_messages.h" |
#include "chrome/utility/cloud_print/bitmap_image.h" |
#include "chrome/utility/cloud_print/pwg_encoder.h" |
#include "content/public/utility/utility_thread.h" |
+#include "mojo/public/cpp/bindings/message.h" |
+#include "mojo/public/cpp/bindings/strong_binding.h" |
+#include "mojo/public/cpp/system/platform_handle.h" |
#include "pdf/pdf.h" |
#include "printing/features/features.h" |
#include "printing/page_range.h" |
@@ -33,104 +35,114 @@ namespace printing { |
namespace { |
-bool Send(IPC::Message* message) { |
- return content::UtilityThread::Get()->Send(message); |
-} |
- |
void ReleaseProcessIfNeeded() { |
content::UtilityThread::Get()->ReleaseProcessIfNeeded(); |
} |
+static mojom::FontPreCaching* g_font_pre_caching; |
+ |
#if defined(OS_WIN) |
void PreCacheFontCharacters(const LOGFONT* logfont, |
const wchar_t* text, |
size_t text_length) { |
- Send(new ChromeUtilityHostMsg_PreCacheFontCharacters( |
- *logfont, base::string16(text, text_length))); |
+ if (g_font_pre_caching) { |
+ g_font_pre_caching->PreCacheFontCharacters( |
+ *logfont, base::string16(text, text_length)); |
+ } |
} |
#endif |
} // namespace |
-PrintingHandler::PrintingHandler() { |
+PrintingHandler::PrintingHandler(mojom::FontPreCachingPtr font_pre_caching) |
+ : font_pre_caching_(std::move(font_pre_caching)) { |
+ g_font_pre_caching = font_pre_caching_.get(); |
#if defined(OS_WIN) |
chrome_pdf::SetPDFEnsureTypefaceCharactersAccessible(PreCacheFontCharacters); |
#endif |
} |
-PrintingHandler::~PrintingHandler() {} |
- |
-bool PrintingHandler::OnMessageReceived(const IPC::Message& message) { |
- bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(PrintingHandler, message) |
+PrintingHandler::~PrintingHandler() { |
#if defined(OS_WIN) |
- IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToMetafiles, |
- OnRenderPDFPagesToMetafile) |
- IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToMetafiles_GetPage, |
- OnRenderPDFPagesToMetafileGetPage) |
- IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToMetafiles_Stop, |
- OnRenderPDFPagesToMetafileStop) |
-#endif // OS_WIN |
-#if BUILDFLAG(ENABLE_PRINT_PREVIEW) |
- IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToPWGRaster, |
- OnRenderPDFPagesToPWGRaster) |
- IPC_MESSAGE_HANDLER(ChromeUtilityMsg_GetPrinterCapsAndDefaults, |
- OnGetPrinterCapsAndDefaults) |
- IPC_MESSAGE_HANDLER(ChromeUtilityMsg_GetPrinterSemanticCapsAndDefaults, |
- OnGetPrinterSemanticCapsAndDefaults) |
-#endif // ENABLE_PRINT_PREVIEW |
- IPC_MESSAGE_UNHANDLED(handled = false) |
- IPC_END_MESSAGE_MAP() |
- return handled; |
+ chrome_pdf::SetPDFEnsureTypefaceCharactersAccessible(nullptr); |
+#endif |
+ g_font_pre_caching = nullptr; |
} |
-#if defined(OS_WIN) |
-void PrintingHandler::OnRenderPDFPagesToMetafile( |
- IPC::PlatformFileForTransit pdf_transit, |
+void PrintingHandler::PrintingHandlerFactory::MakePrinting( |
+ mojom::PrintingRequest request, |
+ mojom::FontPreCachingPtr font_pre_caching) { |
+ auto impl = base::MakeUnique<PrintingHandler>(std::move(font_pre_caching)); |
+ base::Closure error_handler = base::Bind(&PrintingHandler::OnConnectionClosed, |
+ base::Unretained(impl.get())); |
+ auto binding = mojo::MakeStrongBinding(std::move(impl), std::move(request)); |
+ binding->set_connection_error_handler(error_handler); |
+} |
+ |
+// static |
+void PrintingHandler::Create(mojom::PrintingFactoryRequest request) { |
+ mojo::MakeStrongBinding(base::MakeUnique<PrintingHandlerFactory>(), |
+ std::move(request)); |
+} |
+ |
+// TODO(crbug.com/676224): Conditionally define some messages instead of |
+// rejecting them at runtime. |
+void PrintingHandler::RenderPDFPagesToMetafiles( |
+ base::File pdf_file, |
const PdfRenderSettings& settings, |
- bool print_text_with_gdi) { |
+ bool print_text_with_gdi, |
+ const RenderPDFPagesToMetafilesCallback& callback) { |
+#if defined(OS_WIN) |
pdf_rendering_settings_ = settings; |
chrome_pdf::SetPDFUseGDIPrinting(print_text_with_gdi); |
- base::File pdf_file = IPC::PlatformFileForTransitToFile(pdf_transit); |
int page_count = LoadPDF(std::move(pdf_file)); |
- Send( |
- new ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_PageCount(page_count)); |
+ callback.Run(page_count); |
+#else |
+ mojo::ReportBadMessage("RenderPDFPagesToMetafiles is Windows only"); |
+#endif |
} |
-void PrintingHandler::OnRenderPDFPagesToMetafileGetPage( |
+void PrintingHandler::RenderPDFPagesToMetafilesGetPage( |
int page_number, |
- IPC::PlatformFileForTransit output_file) { |
- base::File emf_file = IPC::PlatformFileForTransitToFile(output_file); |
+ base::File emf_file, |
+ const RenderPDFPagesToMetafilesGetPageCallback& callback) { |
+#if defined(OS_WIN) |
float scale_factor = 1.0f; |
bool success = |
RenderPdfPageToMetafile(page_number, std::move(emf_file), &scale_factor); |
- Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_PageDone( |
- success, scale_factor)); |
+ callback.Run(success, scale_factor); |
+#else |
+ mojo::ReportBadMessage("RenderPDFPagesToMetafilesGetPage is Windows only"); |
+#endif |
} |
-void PrintingHandler::OnRenderPDFPagesToMetafileStop() { |
+void PrintingHandler::OnConnectionClosed() { |
+#if defined(OS_WIN) |
ReleaseProcessIfNeeded(); |
+#else |
+ NOTREACHED(); |
+#endif |
} |
-#endif // OS_WIN |
- |
-#if BUILDFLAG(ENABLE_PRINT_PREVIEW) |
-void PrintingHandler::OnRenderPDFPagesToPWGRaster( |
- IPC::PlatformFileForTransit pdf_transit, |
+void PrintingHandler::RenderPDFPagesToPWGRaster( |
+ base::File pdf, |
const PdfRenderSettings& settings, |
const PwgRasterSettings& bitmap_settings, |
- IPC::PlatformFileForTransit bitmap_transit) { |
- base::File pdf = IPC::PlatformFileForTransitToFile(pdf_transit); |
- base::File bitmap = IPC::PlatformFileForTransitToFile(bitmap_transit); |
+ base::File bitmap, |
+ const RenderPDFPagesToPWGRasterCallback& callback) { |
+#if BUILDFLAG(ENABLE_PRINT_PREVIEW) |
if (RenderPDFPagesToPWGRaster(std::move(pdf), settings, bitmap_settings, |
std::move(bitmap))) { |
- Send(new ChromeUtilityHostMsg_RenderPDFPagesToPWGRaster_Succeeded()); |
+ callback.Run(true); |
} else { |
- Send(new ChromeUtilityHostMsg_RenderPDFPagesToPWGRaster_Failed()); |
+ callback.Run(false); |
} |
ReleaseProcessIfNeeded(); |
-} |
+#else |
+ mojo::ReportBadMessage( |
+ "RenderPDFPagesToPWGRaster requires print preview to be enabled"); |
#endif // ENABLE_PRINT_PREVIEW |
+} |
#if defined(OS_WIN) |
int PrintingHandler::LoadPDF(base::File pdf_file) { |
@@ -270,9 +282,12 @@ bool PrintingHandler::RenderPDFPagesToPWGRaster( |
} |
return true; |
} |
+#endif // ENABLE_PRINT_PREVIEW |
-void PrintingHandler::OnGetPrinterCapsAndDefaults( |
- const std::string& printer_name) { |
+void PrintingHandler::GetPrinterCapsAndDefaults( |
+ const std::string& printer_name, |
+ const GetPrinterCapsAndDefaultsCallback& callback) { |
+#if BUILDFLAG(ENABLE_PRINT_PREVIEW) |
scoped_refptr<PrintBackend> print_backend = |
PrintBackend::CreateInstance(nullptr); |
PrinterCapsAndDefaults printer_info; |
@@ -281,17 +296,21 @@ void PrintingHandler::OnGetPrinterCapsAndDefaults( |
print_backend->GetPrinterDriverInfo(printer_name)); |
if (print_backend->GetPrinterCapsAndDefaults(printer_name, &printer_info)) { |
- Send(new ChromeUtilityHostMsg_GetPrinterCapsAndDefaults_Succeeded( |
- printer_name, printer_info)); |
+ callback.Run(printer_info); |
} else { |
- Send(new ChromeUtilityHostMsg_GetPrinterCapsAndDefaults_Failed( |
- printer_name)); |
+ callback.Run(base::nullopt); |
} |
ReleaseProcessIfNeeded(); |
+#else |
+ mojo::ReportBadMessage( |
+ "GetPrinterCapsAndDefaults requires print preview to be enabled"); |
+#endif // ENABLE_PRINT_PREVIEW |
} |
-void PrintingHandler::OnGetPrinterSemanticCapsAndDefaults( |
- const std::string& printer_name) { |
+void PrintingHandler::GetPrinterSemanticCapsAndDefaults( |
+ const std::string& printer_name, |
+ const GetPrinterSemanticCapsAndDefaultsCallback& callback) { |
+#if BUILDFLAG(ENABLE_PRINT_PREVIEW) |
scoped_refptr<PrintBackend> print_backend = |
PrintBackend::CreateInstance(nullptr); |
PrinterSemanticCapsAndDefaults printer_info; |
@@ -301,14 +320,15 @@ void PrintingHandler::OnGetPrinterSemanticCapsAndDefaults( |
if (print_backend->GetPrinterSemanticCapsAndDefaults(printer_name, |
&printer_info)) { |
- Send(new ChromeUtilityHostMsg_GetPrinterSemanticCapsAndDefaults_Succeeded( |
- printer_name, printer_info)); |
+ callback.Run(printer_info); |
} else { |
- Send(new ChromeUtilityHostMsg_GetPrinterSemanticCapsAndDefaults_Failed( |
- printer_name)); |
+ callback.Run(base::nullopt); |
} |
ReleaseProcessIfNeeded(); |
-} |
+#else |
+ mojo::ReportBadMessage( |
+ "GetPrinterSemanticCapsAndDefaults requires print preview to be enabled"); |
#endif // ENABLE_PRINT_PREVIEW |
+} |
} // namespace printing |