1 // Copyright (c) 2011 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 // IPC messages for printing. 6 // Multiply-included message file, hence no include guard. 7 8 #include "base/values.h" 9 #include "base/shared_memory.h" 10 #include "ipc/ipc_message_macros.h" 11 #include "ui/gfx/native_widget_types.h" 12 #include "ui/gfx/rect.h" 13 14 #define IPC_MESSAGE_START PrintMsgStart 15 16 // Parameters for a render request. 17 IPC_STRUCT_BEGIN(PrintMsg_Print_Params) 18 // Physical size of the page, including non-printable margins, 19 // in pixels according to dpi. 20 IPC_STRUCT_MEMBER(gfx::Size, page_size) 21 22 // In pixels according to dpi_x and dpi_y. 23 IPC_STRUCT_MEMBER(gfx::Size, printable_size) 24 25 // The y-offset of the printable area, in pixels according to dpi. 26 IPC_STRUCT_MEMBER(int, margin_top) 27 28 // The x-offset of the printable area, in pixels according to dpi. 29 IPC_STRUCT_MEMBER(int, margin_left) 30 31 // Specifies dots per inch. 32 IPC_STRUCT_MEMBER(double, dpi) 33 34 // Minimum shrink factor. See PrintSettings::min_shrink for more information. 35 IPC_STRUCT_MEMBER(double, min_shrink) 36 37 // Maximum shrink factor. See PrintSettings::max_shrink for more information. 38 IPC_STRUCT_MEMBER(double, max_shrink) 39 40 // Desired apparent dpi on paper. 41 IPC_STRUCT_MEMBER(int, desired_dpi) 42 43 // Cookie for the document to ensure correctness. 44 IPC_STRUCT_MEMBER(int, document_cookie) 45 46 // Should only print currently selected text. 47 IPC_STRUCT_MEMBER(bool, selection_only) 48 49 // Does the printer support alpha blending? 50 IPC_STRUCT_MEMBER(bool, supports_alpha_blend) 51 IPC_STRUCT_END() 52 53 IPC_STRUCT_BEGIN(PrintMsg_PrintPage_Params) 54 // Parameters to render the page as a printed page. It must always be the same 55 // value for all the document. 56 IPC_STRUCT_MEMBER(PrintMsg_Print_Params, params) 57 58 // The page number is the indicator of the square that should be rendered 59 // according to the layout specified in PrintMsg_Print_Params. 60 IPC_STRUCT_MEMBER(int, page_number) 61 IPC_STRUCT_END() 62 63 IPC_STRUCT_BEGIN(PrintMsg_PrintPages_Params) 64 // Parameters to render the page as a printed page. It must always be the same 65 // value for all the document. 66 IPC_STRUCT_MEMBER(PrintMsg_Print_Params, params) 67 68 // If empty, this means a request to render all the printed pages. 69 IPC_STRUCT_MEMBER(std::vector<int>, pages) 70 IPC_STRUCT_END() 71 72 // Parameters to describe a rendered document. 73 IPC_STRUCT_BEGIN(PrintHostMsg_DidPreviewDocument_Params) 74 // A shared memory handle to metafile data. 75 IPC_STRUCT_MEMBER(base::SharedMemoryHandle, metafile_data_handle) 76 77 // Size of metafile data. 78 IPC_STRUCT_MEMBER(uint32, data_size) 79 80 // Cookie for the document to ensure correctness. 81 IPC_STRUCT_MEMBER(int, document_cookie) 82 83 // Store the expected pages count. 84 IPC_STRUCT_MEMBER(int, expected_pages_count) 85 IPC_STRUCT_END() 86 87 // Parameters to describe a rendered page. 88 IPC_STRUCT_BEGIN(PrintHostMsg_DidPrintPage_Params) 89 // A shared memory handle to the EMF data. This data can be quite large so a 90 // memory map needs to be used. 91 IPC_STRUCT_MEMBER(base::SharedMemoryHandle, metafile_data_handle) 92 93 // Size of the metafile data. 94 IPC_STRUCT_MEMBER(uint32, data_size) 95 96 // Cookie for the document to ensure correctness. 97 IPC_STRUCT_MEMBER(int, document_cookie) 98 99 // Page number. 100 IPC_STRUCT_MEMBER(int, page_number) 101 102 // Shrink factor used to render this page. 103 IPC_STRUCT_MEMBER(double, actual_shrink) 104 105 // The size of the page the page author specified. 106 IPC_STRUCT_MEMBER(gfx::Size, page_size) 107 108 // The printable area the page author specified. 109 IPC_STRUCT_MEMBER(gfx::Rect, content_area) 110 111 // True if the page has visible overlays. 112 IPC_STRUCT_MEMBER(bool, has_visible_overlays) 113 IPC_STRUCT_END() 114 115 // Parameters for the IPC message ViewHostMsg_ScriptedPrint 116 IPC_STRUCT_BEGIN(PrintHostMsg_ScriptedPrint_Params) 117 IPC_STRUCT_MEMBER(int, routing_id) 118 IPC_STRUCT_MEMBER(gfx::NativeViewId, host_window_id) 119 IPC_STRUCT_MEMBER(int, cookie) 120 IPC_STRUCT_MEMBER(int, expected_pages_count) 121 IPC_STRUCT_MEMBER(bool, has_selection) 122 IPC_STRUCT_MEMBER(bool, use_overlays) 123 IPC_STRUCT_END() 124 125 126 // Messages sent from the browser to the renderer. 127 128 IPC_MESSAGE_ROUTED0(PrintMsg_PrintNodeUnderContextMenu) 129 130 // Tells the renderer to print the print preview tab's PDF plugin without 131 // showing the print dialog. 132 IPC_MESSAGE_ROUTED1(PrintMsg_PrintForPrintPreview, 133 DictionaryValue /* settings*/) 134 135 // Tells the render view to switch the CSS to print media type, renders every 136 // requested pages and switch back the CSS to display media type. 137 IPC_MESSAGE_ROUTED0(PrintMsg_PrintPages) 138 139 // Tells the render view that printing is done so it can clean up. 140 IPC_MESSAGE_ROUTED2(PrintMsg_PrintingDone, 141 int /* document_cookie */, 142 bool /* success */) 143 144 // Tells the render view to switch the CSS to print media type, renders every 145 // requested pages for print preview using the given |settngs|. 146 IPC_MESSAGE_ROUTED1(PrintMsg_PrintPreview, 147 DictionaryValue /* settings */) 148 149 // Tells a renderer to stop blocking script initiated printing. 150 IPC_MESSAGE_ROUTED0(PrintMsg_ResetScriptedPrintCount) 151 152 153 // Messages sent from the renderer to the browser. 154 155 #if defined(OS_WIN) 156 // Duplicates a shared memory handle from the renderer to the browser. Then 157 // the renderer can flush the handle. 158 IPC_SYNC_MESSAGE_ROUTED1_1(PrintHostMsg_DuplicateSection, 159 base::SharedMemoryHandle /* renderer handle */, 160 base::SharedMemoryHandle /* browser handle */) 161 #endif 162 163 // Tells the browser that the renderer is done calculating the number of 164 // rendered pages according to the specified settings. 165 IPC_MESSAGE_ROUTED2(PrintHostMsg_DidGetPrintedPagesCount, 166 int /* rendered document cookie */, 167 int /* number of rendered pages */) 168 169 // Sends back to the browser the rendered "printed page" that was requested by 170 // a ViewMsg_PrintPage message or from scripted printing. The memory handle in 171 // this message is already valid in the browser process. 172 IPC_MESSAGE_ROUTED1(PrintHostMsg_DidPrintPage, 173 PrintHostMsg_DidPrintPage_Params /* page content */) 174 175 // The renderer wants to know the default print settings. 176 IPC_SYNC_MESSAGE_ROUTED0_1(PrintHostMsg_GetDefaultPrintSettings, 177 PrintMsg_Print_Params /* default_settings */) 178 179 // The renderer wants to update the current print settings with new 180 // |job_settings|. 181 IPC_SYNC_MESSAGE_ROUTED2_1(PrintHostMsg_UpdatePrintSettings, 182 int /* document_cookie */, 183 DictionaryValue /* job_settings */, 184 PrintMsg_PrintPages_Params /* current_settings */) 185 186 // It's the renderer that controls the printing process when it is generated 187 // by javascript. This step is about showing UI to the user to select the 188 // final print settings. The output parameter is the same as 189 // ViewMsg_PrintPages which is executed implicitly. 190 IPC_SYNC_MESSAGE_ROUTED1_1(PrintHostMsg_ScriptedPrint, 191 PrintHostMsg_ScriptedPrint_Params, 192 PrintMsg_PrintPages_Params 193 /* settings chosen by the user*/) 194 195 #if defined(USE_X11) 196 // Asks the browser to create a temporary file for the renderer to fill 197 // in resulting NativeMetafile in printing. 198 IPC_SYNC_MESSAGE_CONTROL0_2(PrintHostMsg_AllocateTempFileForPrinting, 199 base::FileDescriptor /* temp file fd */, 200 int /* fd in browser*/) 201 IPC_MESSAGE_CONTROL1(PrintHostMsg_TempFileForPrintingWritten, 202 int /* fd in browser */) 203 #endif 204 205 // Asks the browser to do print preview for the node under the context menu. 206 IPC_MESSAGE_ROUTED0(PrintHostMsg_PrintPreviewNodeUnderContextMenu) 207 208 // Asks the browser to do print preview for window.print(). 209 IPC_MESSAGE_ROUTED0(PrintHostMsg_ScriptInitiatedPrintPreview) 210 211 // Sends back to the browser the rendered "printed document" for preview that 212 // was requested by a PrintMsg_PrintPreview message. The memory handle in this 213 // message is already valid in the browser process. 214 IPC_MESSAGE_ROUTED1(PrintHostMsg_PagesReadyForPreview, 215 PrintHostMsg_DidPreviewDocument_Params /* params */) 216