1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_UTILITY_PRINTING_HANDLER_H_
6#define CHROME_UTILITY_PRINTING_HANDLER_H_
7
8#include "base/compiler_specific.h"
9#include "base/macros.h"
10#include "chrome/utility/utility_message_handler.h"
11#include "ipc/ipc_platform_file.h"
12#include "printing/pdf_render_settings.h"
13
14#if !defined(ENABLE_FULL_PRINTING) && !defined(OS_WIN)
15#error "Windows or full printing must be enabled"
16#endif
17
18namespace printing {
19class PdfRenderSettings;
20struct PwgRasterSettings;
21struct PageRange;
22}
23
24// Dispatches IPCs for printing.
25class PrintingHandler : public UtilityMessageHandler {
26 public:
27  PrintingHandler();
28  virtual ~PrintingHandler();
29
30  static void PreSandboxStartup();
31
32  // IPC::Listener:
33  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
34
35 private:
36  // IPC message handlers.
37#if defined(OS_WIN)
38  void OnRenderPDFPagesToMetafile(IPC::PlatformFileForTransit pdf_transit,
39                                  const printing::PdfRenderSettings& settings);
40  void OnRenderPDFPagesToMetafileGetPage(
41      int page_number,
42      IPC::PlatformFileForTransit output_file);
43  void OnRenderPDFPagesToMetafileStop();
44#endif  // OS_WIN
45#if defined(ENABLE_FULL_PRINTING)
46  void OnRenderPDFPagesToPWGRaster(
47      IPC::PlatformFileForTransit pdf_transit,
48      const printing::PdfRenderSettings& settings,
49      const printing::PwgRasterSettings& bitmap_settings,
50      IPC::PlatformFileForTransit bitmap_transit);
51#endif  // ENABLE_FULL_PRINTING
52
53#if defined(OS_WIN)
54  int LoadPDF(base::File pdf_file);
55  bool RenderPdfPageToMetafile(int page_number,
56                               base::File output_file,
57                               double* scale_factor);
58#endif  // OS_WIN
59#if defined(ENABLE_FULL_PRINTING)
60  bool RenderPDFPagesToPWGRaster(
61      base::File pdf_file,
62      const printing::PdfRenderSettings& settings,
63      const printing::PwgRasterSettings& bitmap_settings,
64      base::File bitmap_file);
65
66  void OnGetPrinterCapsAndDefaults(const std::string& printer_name);
67  void OnGetPrinterSemanticCapsAndDefaults(const std::string& printer_name);
68#endif  // ENABLE_FULL_PRINTING
69
70#if defined(OS_WIN)
71  std::vector<char> pdf_data_;
72  printing::PdfRenderSettings pdf_rendering_settings_;
73#endif
74
75  DISALLOW_COPY_AND_ASSIGN(PrintingHandler);
76};
77
78#endif  // CHROME_UTILITY_PRINTING_HANDLER_H_
79