print_view_manager_electron.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright 2020 Microsoft, Inc. All rights reserved.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef ELECTRON_SHELL_BROWSER_PRINTING_PRINT_VIEW_MANAGER_ELECTRON_H_
  5. #define ELECTRON_SHELL_BROWSER_PRINTING_PRINT_VIEW_MANAGER_ELECTRON_H_
  6. #include <memory>
  7. #include <string>
  8. #include <vector>
  9. #include "base/memory/raw_ptr.h"
  10. #include "base/memory/ref_counted_memory.h"
  11. #include "build/build_config.h"
  12. #include "chrome/browser/printing/print_view_manager_base.h"
  13. #include "components/printing/common/print.mojom.h"
  14. #include "content/public/browser/render_frame_host.h"
  15. #include "content/public/browser/web_contents_observer.h"
  16. #include "content/public/browser/web_contents_user_data.h"
  17. #include "printing/print_settings.h"
  18. namespace electron {
  19. class PrintViewManagerElectron
  20. : public printing::PrintViewManagerBase,
  21. public content::WebContentsUserData<PrintViewManagerElectron> {
  22. public:
  23. enum PrintResult {
  24. PRINT_SUCCESS,
  25. PRINTING_FAILED,
  26. INVALID_PRINTER_SETTINGS,
  27. INVALID_MEMORY_HANDLE,
  28. METAFILE_MAP_ERROR,
  29. METAFILE_INVALID_HEADER,
  30. METAFILE_GET_DATA_ERROR,
  31. SIMULTANEOUS_PRINT_ACTIVE,
  32. PAGE_RANGE_SYNTAX_ERROR,
  33. PAGE_RANGE_INVALID_RANGE,
  34. PAGE_COUNT_EXCEEDED,
  35. };
  36. using PrintToPDFCallback =
  37. base::OnceCallback<void(PrintResult,
  38. scoped_refptr<base::RefCountedMemory>)>;
  39. ~PrintViewManagerElectron() override;
  40. PrintViewManagerElectron(const PrintViewManagerElectron&) = delete;
  41. PrintViewManagerElectron& operator=(const PrintViewManagerElectron&) = delete;
  42. static void BindPrintManagerHost(
  43. mojo::PendingAssociatedReceiver<printing::mojom::PrintManagerHost>
  44. receiver,
  45. content::RenderFrameHost* rfh);
  46. static std::string PrintResultToString(PrintResult result);
  47. void PrintToPdf(content::RenderFrameHost* rfh,
  48. const std::string& page_ranges,
  49. printing::mojom::PrintPagesParamsPtr print_page_params,
  50. PrintToPDFCallback callback);
  51. private:
  52. explicit PrintViewManagerElectron(content::WebContents* web_contents);
  53. friend class content::WebContentsUserData<PrintViewManagerElectron>;
  54. // WebContentsObserver overrides (via PrintManager):
  55. void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override;
  56. // printing::mojom::PrintManagerHost:
  57. void DidPrintDocument(printing::mojom::DidPrintDocumentParamsPtr params,
  58. DidPrintDocumentCallback callback) override;
  59. void DidGetPrintedPagesCount(int32_t cookie, uint32_t number_pages) override;
  60. void GetDefaultPrintSettings(
  61. GetDefaultPrintSettingsCallback callback) override;
  62. void ScriptedPrint(printing::mojom::ScriptedPrintParamsPtr params,
  63. ScriptedPrintCallback callback) override;
  64. void ShowInvalidPrinterSettingsError() override;
  65. void PrintingFailed(int32_t cookie,
  66. printing::mojom::PrintFailureReason reason) override;
  67. #if BUILDFLAG(ENABLE_PRINT_PREVIEW)
  68. void UpdatePrintSettings(int32_t cookie,
  69. base::Value::Dict job_settings,
  70. UpdatePrintSettingsCallback callback) override;
  71. void SetupScriptedPrintPreview(
  72. SetupScriptedPrintPreviewCallback callback) override;
  73. void ShowScriptedPrintPreview(bool source_is_modifiable) override;
  74. void RequestPrintPreview(
  75. printing::mojom::RequestPrintPreviewParamsPtr params) override;
  76. void CheckForCancel(int32_t preview_ui_id,
  77. int32_t request_id,
  78. CheckForCancelCallback callback) override;
  79. #endif
  80. void Reset();
  81. void ReleaseJob(PrintResult result);
  82. raw_ptr<content::RenderFrameHost> printing_rfh_ = nullptr;
  83. PrintToPDFCallback callback_;
  84. std::string data_;
  85. std::vector<int32_t> headless_jobs_;
  86. WEB_CONTENTS_USER_DATA_KEY_DECL();
  87. };
  88. } // namespace electron
  89. #endif // ELECTRON_SHELL_BROWSER_PRINTING_PRINT_VIEW_MANAGER_ELECTRON_H_