// Copyright 2021 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef PRINTING_TEST_PRINTING_CONTEXT_H_ #define PRINTING_TEST_PRINTING_CONTEXT_H_ #include #include #include "base/containers/flat_map.h" #include "build/build_config.h" #include "printing/mojom/print.mojom.h" #include "printing/print_settings.h" #include "printing/printing_context.h" namespace printing { class TestPrintingContextDelegate : public PrintingContext::Delegate { public: TestPrintingContextDelegate(); TestPrintingContextDelegate(const TestPrintingContextDelegate&) = delete; TestPrintingContextDelegate& operator=(const TestPrintingContextDelegate&) = delete; ~TestPrintingContextDelegate() override; // PrintingContext::Delegate overrides: gfx::NativeView GetParentView() override; std::string GetAppLocale() override; }; class TestPrintingContext : public PrintingContext { public: TestPrintingContext(Delegate* delegate, bool skip_system_calls); TestPrintingContext(const TestPrintingContext&) = delete; TestPrintingContext& operator=(const TestPrintingContext&) = delete; ~TestPrintingContext() override; // Methods for test setup: // Provide settings that will be used as the current settings for the // indicated device. void SetDeviceSettings(const std::string& device_name, std::unique_ptr settings); // Enables tests to fail with an access-denied error. void SetNewDocumentBlockedByPermissions() { new_document_blocked_by_permissions_ = true; } #if BUILDFLAG(IS_WIN) void SetOnRenderPageBlockedByPermissions() { render_page_blocked_by_permissions_ = true; } #endif void SetOnRenderDocumentBlockedByPermissions() { render_document_blocked_by_permissions_ = true; } void SetDocumentDoneBlockedByPermissions() { document_done_blocked_by_permissions_ = true; } // Enables tests to fail with a failed error. void SetUseDefaultSettingsFails() { use_default_settings_fails_ = true; } // Enables tests to fail with a canceled error. void SetAskUserForSettingsCanceled() { ask_user_for_settings_cancel_ = true; } // PrintingContext overrides: void AskUserForSettings(int max_pages, bool has_selection, bool is_scripted, PrintSettingsCallback callback) override; mojom::ResultCode UseDefaultSettings() override; gfx::Size GetPdfPaperSizeDeviceUnits() override; mojom::ResultCode UpdatePrinterSettings( const PrinterSettings& printer_settings) override; mojom::ResultCode NewDocument(const std::u16string& document_name) override; #if BUILDFLAG(IS_WIN) mojom::ResultCode RenderPage(const PrintedPage& page, const PageSetup& page_setup) override; #endif mojom::ResultCode PrintDocument(const MetafilePlayer& metafile, const PrintSettings& settings, uint32_t num_pages) override; mojom::ResultCode DocumentDone() override; void Cancel() override; void ReleaseContext() override; NativeDrawingContext context() const override; #if BUILDFLAG(IS_WIN) mojom::ResultCode InitWithSettingsForTest( std::unique_ptr settings) override; #endif private: base::flat_map> device_settings_; bool use_default_settings_fails_ = false; bool ask_user_for_settings_cancel_ = false; bool new_document_blocked_by_permissions_ = false; #if BUILDFLAG(IS_WIN) bool render_page_blocked_by_permissions_ = false; #endif bool render_document_blocked_by_permissions_ = false; bool document_done_blocked_by_permissions_ = false; }; } // namespace printing #endif // PRINTING_TEST_PRINTING_CONTEXT_H_