// Copyright (c) 2012 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 CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_PRINT_PREVIEW_UI_H_ #define CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_PRINT_PREVIEW_UI_H_ #include <string> #include "base/gtest_prod_util.h" #include "base/memory/ref_counted.h" #include "base/time/time.h" #include "chrome/browser/ui/webui/constrained_web_dialog_ui.h" class PrintPreviewDataService; class PrintPreviewHandler; struct PrintHostMsg_DidGetPreviewPageCount_Params; struct PrintHostMsg_RequestPrintPreview_Params; namespace base { class RefCountedBytes; } namespace gfx { class Rect; } namespace printing { struct PageSizeMargins; } class PrintPreviewUI : public ConstrainedWebDialogUI { public: explicit PrintPreviewUI(content::WebUI* web_ui); virtual ~PrintPreviewUI(); // Gets the print preview |data|. |index| is zero-based, and can be // |printing::COMPLETE_PREVIEW_DOCUMENT_INDEX| to get the entire preview // document. void GetPrintPreviewDataForIndex(int index, scoped_refptr<base::RefCountedBytes>* data); // Sets the print preview |data|. |index| is zero-based, and can be // |printing::COMPLETE_PREVIEW_DOCUMENT_INDEX| to set the entire preview // document. void SetPrintPreviewDataForIndex(int index, const base::RefCountedBytes* data); // Clear the existing print preview data. void ClearAllPreviewData(); // Returns the available draft page count. int GetAvailableDraftPageCount(); // Setters void SetInitiatorTitle(const base::string16& initiator_title); base::string16 initiator_title() { return initiator_title_; } bool source_is_modifiable() { return source_is_modifiable_; } bool source_has_selection() { return source_has_selection_; } bool print_selection_only() { return print_selection_only_; } // Set initial settings for PrintPreviewUI. static void SetInitialParams( content::WebContents* print_preview_dialog, const PrintHostMsg_RequestPrintPreview_Params& params); // Determines whether to cancel a print preview request based on // |preview_ui_id| and |request_id|. // Can be called from any thread. static void GetCurrentPrintPreviewStatus(int32 preview_ui_id, int request_id, bool* cancel); // Returns an id to uniquely identify this PrintPreviewUI. int32 GetIDForPrintPreviewUI() const; // Notifies the Web UI of a print preview request with |request_id|. void OnPrintPreviewRequest(int request_id); // Notifies the Web UI to show the system dialog. void OnShowSystemDialog(); // Notifies the Web UI about the page count of the request preview. void OnDidGetPreviewPageCount( const PrintHostMsg_DidGetPreviewPageCount_Params& params); // Notifies the Web UI of the default page layout according to the currently // selected printer and page size. void OnDidGetDefaultPageLayout(const printing::PageSizeMargins& page_layout, const gfx::Rect& printable_area, bool has_custom_page_size_style); // Notifies the Web UI that the 0-based page |page_number| has been rendered. // |preview_request_id| indicates wich request resulted in this response. void OnDidPreviewPage(int page_number, int preview_request_id); // Notifies the Web UI renderer that preview data is available. // |expected_pages_count| specifies the total number of pages. // |preview_request_id| indicates which request resulted in this response. void OnPreviewDataIsAvailable(int expected_pages_count, int preview_request_id); // Notifies the Web UI that preview dialog has been destroyed. This is the // last chance to communicate with the initiator before the association is // erased. void OnPrintPreviewDialogDestroyed(); // Notifies the Web UI that the print preview failed to render. void OnPrintPreviewFailed(); // Notified the Web UI that this print preview dialog's RenderProcess has been // closed, which may occur for several reasons, e.g. tab closure or crash. void OnPrintPreviewDialogClosed(); // Notifies the Web UI that initiator is closed, so we can disable all the // controls that need the initiator for generating the preview data. void OnInitiatorClosed(); // Notifies the Web UI renderer that file selection has been cancelled. void OnFileSelectionCancelled(); // Notifies the Web UI that the printer is unavailable or its settings are // invalid. void OnInvalidPrinterSettings(); // Notifies the Web UI to cancel the pending preview request. void OnCancelPendingPreviewRequest(); // Hides the print preview dialog. void OnHidePreviewDialog(); // Closes the print preview dialog. void OnClosePrintPreviewDialog(); // Reload the printers list. void OnReloadPrintersList(); // Notifies the WebUI that the pdf print scaling option is disabled by // default. void OnPrintPreviewScalingDisabled(); // Allows tests to wait until the print preview dialog is loaded. Optionally // also instructs the dialog to auto-cancel, which is used for testing only. class TestingDelegate { public: virtual bool IsAutoCancelEnabled() = 0; virtual void DidGetPreviewPageCount(int page_count) = 0; virtual void DidRenderPreviewPage(content::WebContents* preview_dialog) = 0; }; static void SetDelegateForTesting(TestingDelegate* delegate); private: friend class PrintPreviewHandlerTest; FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, StickyMarginsCustom); FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, StickyMarginsDefault); FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, StickyMarginsCustomThenDefault); FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, GetLastUsedMarginSettingsCustom); FRIEND_TEST_ALL_PREFIXES(PrintPreviewHandlerTest, GetLastUsedMarginSettingsDefault); FRIEND_TEST_ALL_PREFIXES(PrintPreviewDialogControllerUnitTest, TitleAfterReload); // Returns the Singleton instance of the PrintPreviewDataService. PrintPreviewDataService* print_preview_data_service(); base::TimeTicks initial_preview_start_time_; // The unique ID for this class instance. Stored here to avoid calling // GetIDForPrintPreviewUI() everywhere. const int32 id_; // Weak pointer to the WebUI handler. PrintPreviewHandler* handler_; // Indicates whether the source document can be modified. bool source_is_modifiable_; // Indicates whether the source document has selection. bool source_has_selection_; // Indicates whether only the selection should be printed. bool print_selection_only_; // Store the initiator title, used for populating the print preview dialog // title. base::string16 initiator_title_; // Keeps track of whether OnClosePrintPreviewDialog() has been called or not. bool dialog_closed_; DISALLOW_COPY_AND_ASSIGN(PrintPreviewUI); }; #endif // CHROME_BROWSER_UI_WEBUI_PRINT_PREVIEW_PRINT_PREVIEW_UI_H_