1 // Copyright (c) 2012 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_RENDERER_MOCK_PRINTER_H_ 6 #define CHROME_RENDERER_MOCK_PRINTER_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "base/memory/ref_counted.h" 13 #include "base/memory/scoped_ptr.h" 14 #include "base/strings/string16.h" 15 #include "printing/image.h" 16 #include "third_party/WebKit/public/web/WebPrintScalingOption.h" 17 #include "ui/gfx/rect.h" 18 #include "ui/gfx/size.h" 19 20 struct PrintMsg_Print_Params; 21 struct PrintMsg_PrintPages_Params; 22 struct PrintHostMsg_DidPrintPage_Params; 23 24 // A class which represents an output page used in the MockPrinter class. 25 // The MockPrinter class stores output pages in a vector, so, this class 26 // inherits the base::RefCounted<> class so that the MockPrinter class can use 27 // a smart pointer of this object (i.e. scoped_refptr<>). 28 class MockPrinterPage : public base::RefCounted<MockPrinterPage> { 29 public: 30 MockPrinterPage(const void* source_data, 31 uint32 source_size, 32 const printing::Image& image); 33 34 int width() const { return image_.size().width(); } 35 int height() const { return image_.size().height(); } 36 const uint8* source_data() const { return source_data_.get(); } 37 uint32 source_size() const { return source_size_; } 38 const printing::Image& image() const { return image_; } 39 40 private: 41 friend class base::RefCounted<MockPrinterPage>; 42 virtual ~MockPrinterPage(); 43 44 uint32 source_size_; 45 scoped_ptr<uint8[]> source_data_; 46 printing::Image image_; 47 48 DISALLOW_COPY_AND_ASSIGN(MockPrinterPage); 49 }; 50 51 // A class which implements a pseudo-printer object used by the RenderViewTest 52 // class. 53 // This class consists of three parts: 54 // 1. An IPC-message hanlder sent from the RenderView class; 55 // 2. A renderer that creates a printing job into bitmaps, and; 56 // 3. A vector which saves the output pages of a printing job. 57 // A user who writes RenderViewTest cases only use the functions which 58 // retrieve output pages from this vector to verify them with expected results. 59 class MockPrinter { 60 public: 61 enum Status { 62 PRINTER_READY, 63 PRINTER_PRINTING, 64 PRINTER_ERROR, 65 }; 66 67 MockPrinter(); 68 ~MockPrinter(); 69 70 // Functions that changes settings of a pseudo printer. 71 void ResetPrinter(); 72 void SetDefaultPrintSettings(const PrintMsg_Print_Params& params); 73 void UseInvalidSettings(); 74 void UseInvalidPageSize(); 75 void UseInvalidContentSize(); 76 77 // Functions that handles IPC events. 78 void GetDefaultPrintSettings(PrintMsg_Print_Params* params); 79 void ScriptedPrint(int cookie, 80 int expected_pages_count, 81 bool has_selection, 82 PrintMsg_PrintPages_Params* settings); 83 void UpdateSettings(int cookie, PrintMsg_PrintPages_Params* params, 84 const std::vector<int>& page_range_array, 85 int margins_type); 86 void SetPrintedPagesCount(int cookie, int number_pages); 87 void PrintPage(const PrintHostMsg_DidPrintPage_Params& params); 88 89 // Functions that retrieve the output pages. 90 Status GetPrinterStatus() const { return printer_status_; } 91 int GetPrintedPages() const; 92 93 // Get a pointer to the printed page, returns NULL if pageno has not been 94 // printed. The pointer is for read only view and should not be deleted. 95 const MockPrinterPage* GetPrintedPage(unsigned int pageno) const; 96 97 int GetWidth(unsigned int page) const; 98 int GetHeight(unsigned int page) const; 99 bool GetBitmapChecksum(unsigned int page, std::string* checksum) const; 100 bool GetSource(unsigned int page, const void** data, uint32* size) const; 101 bool GetBitmap(unsigned int page, const void** data, uint32* size) const; 102 bool SaveSource(unsigned int page, const base::FilePath& filepath) const; 103 bool SaveBitmap(unsigned int page, const base::FilePath& filepath) const; 104 105 protected: 106 int CreateDocumentCookie(); 107 108 private: 109 // Helper function to fill the fields in |params|. 110 void SetPrintParams(PrintMsg_Print_Params* params); 111 112 // In pixels according to dpi_x and dpi_y. 113 gfx::Size page_size_; 114 gfx::Size content_size_; 115 int margin_left_; 116 int margin_top_; 117 gfx::Rect printable_area_; 118 119 // Specifies dots per inch. 120 double dpi_; 121 double max_shrink_; 122 double min_shrink_; 123 124 // Desired apparent dpi on paper. 125 int desired_dpi_; 126 127 // Print selection. 128 bool selection_only_; 129 130 // Print css backgrounds. 131 bool should_print_backgrounds_; 132 133 // Cookie for the document to ensure correctness. 134 int document_cookie_; 135 int current_document_cookie_; 136 137 // The current status of this printer. 138 Status printer_status_; 139 140 // The output of a printing job. 141 int number_pages_; 142 int page_number_; 143 144 // Used only in the preview sequence. 145 bool is_first_request_; 146 bool print_to_pdf_; 147 int preview_request_id_; 148 149 // Specifies whether to retain/crop/scale source page size to fit the 150 // given printable area. 151 WebKit::WebPrintScalingOption print_scaling_option_; 152 153 // Used for displaying headers and footers. 154 bool display_header_footer_; 155 string16 date_; 156 string16 title_; 157 string16 url_; 158 159 // Used for generating invalid settings. 160 bool use_invalid_settings_; 161 162 std::vector<scoped_refptr<MockPrinterPage> > pages_; 163 164 DISALLOW_COPY_AND_ASSIGN(MockPrinter); 165 }; 166 167 #endif // CHROME_RENDERER_MOCK_PRINTER_H_ 168