1 // Copyright 2013 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 // Multiply-included message file, hence no include guard. 6 7 #include "build/build_config.h" 8 #include "content/child/plugin_param_traits.h" 9 #include "content/common/content_export.h" 10 #include "content/common/content_param_traits.h" 11 #include "content/public/common/common_param_traits.h" 12 #include "ipc/ipc_channel_handle.h" 13 #include "ipc/ipc_message_macros.h" 14 #include "ui/gfx/native_widget_types.h" 15 #include "ui/gfx/rect.h" 16 #include "webkit/common/cursors/webcursor.h" 17 18 #if defined(OS_POSIX) 19 #include "base/file_descriptor_posix.h" 20 #endif 21 22 #undef IPC_MESSAGE_EXPORT 23 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT 24 25 #define IPC_MESSAGE_START PluginMsgStart 26 27 IPC_STRUCT_BEGIN(PluginMsg_Init_Params) 28 IPC_STRUCT_MEMBER(GURL, url) 29 IPC_STRUCT_MEMBER(GURL, page_url) 30 IPC_STRUCT_MEMBER(std::vector<std::string>, arg_names) 31 IPC_STRUCT_MEMBER(std::vector<std::string>, arg_values) 32 IPC_STRUCT_MEMBER(bool, load_manually) 33 IPC_STRUCT_MEMBER(int, host_render_view_routing_id) 34 IPC_STRUCT_END() 35 36 IPC_STRUCT_BEGIN(PluginHostMsg_URLRequest_Params) 37 IPC_STRUCT_MEMBER(std::string, url) 38 IPC_STRUCT_MEMBER(std::string, method) 39 IPC_STRUCT_MEMBER(std::string, target) 40 IPC_STRUCT_MEMBER(std::vector<char>, buffer) 41 IPC_STRUCT_MEMBER(int, notify_id) 42 IPC_STRUCT_MEMBER(bool, popups_allowed) 43 IPC_STRUCT_MEMBER(bool, notify_redirects) 44 IPC_STRUCT_END() 45 46 IPC_STRUCT_BEGIN(PluginMsg_DidReceiveResponseParams) 47 IPC_STRUCT_MEMBER(unsigned long, id) 48 IPC_STRUCT_MEMBER(std::string, mime_type) 49 IPC_STRUCT_MEMBER(std::string, headers) 50 IPC_STRUCT_MEMBER(uint32, expected_length) 51 IPC_STRUCT_MEMBER(uint32, last_modified) 52 IPC_STRUCT_MEMBER(bool, request_is_seekable) 53 IPC_STRUCT_END() 54 55 IPC_STRUCT_BEGIN(PluginMsg_UpdateGeometry_Param) 56 IPC_STRUCT_MEMBER(gfx::Rect, window_rect) 57 IPC_STRUCT_MEMBER(gfx::Rect, clip_rect) 58 IPC_STRUCT_MEMBER(TransportDIB::Handle, windowless_buffer0) 59 IPC_STRUCT_MEMBER(TransportDIB::Handle, windowless_buffer1) 60 IPC_STRUCT_MEMBER(int, windowless_buffer_index) 61 IPC_STRUCT_END() 62 63 //----------------------------------------------------------------------------- 64 // Plugin messages 65 // These are messages sent from the renderer process to the plugin process. 66 // Tells the plugin process to create a new plugin instance with the given 67 // id. A corresponding WebPluginDelegateStub is created which hosts the 68 // WebPluginDelegateImpl. 69 IPC_SYNC_MESSAGE_CONTROL1_1(PluginMsg_CreateInstance, 70 std::string /* mime_type */, 71 int /* instance_id */) 72 73 // The WebPluginDelegateProxy sends this to the WebPluginDelegateStub in its 74 // destructor, so that the stub deletes the actual WebPluginDelegateImpl 75 // object that it's hosting. 76 IPC_SYNC_MESSAGE_CONTROL1_0(PluginMsg_DestroyInstance, 77 int /* instance_id */) 78 79 IPC_SYNC_MESSAGE_CONTROL0_1(PluginMsg_GenerateRouteID, 80 int /* id */) 81 82 // The messages below all map to WebPluginDelegate methods. 83 IPC_SYNC_MESSAGE_ROUTED1_2(PluginMsg_Init, 84 PluginMsg_Init_Params, 85 bool /* transparent */, 86 bool /* result */) 87 88 // Used to synchronously request a paint for windowless plugins. 89 IPC_SYNC_MESSAGE_ROUTED1_0(PluginMsg_Paint, 90 gfx::Rect /* damaged_rect */) 91 92 // Sent by the renderer after it paints from its backing store so that the 93 // plugin knows it can send more invalidates. 94 IPC_MESSAGE_ROUTED0(PluginMsg_DidPaint) 95 96 IPC_SYNC_MESSAGE_ROUTED0_1(PluginMsg_GetPluginScriptableObject, 97 int /* route_id */) 98 99 // Gets the form value of the plugin instance synchronously. 100 IPC_SYNC_MESSAGE_ROUTED0_2(PluginMsg_GetFormValue, 101 string16 /* value */, 102 bool /* success */) 103 104 IPC_MESSAGE_ROUTED3(PluginMsg_DidFinishLoadWithReason, 105 GURL /* url */, 106 int /* reason */, 107 int /* notify_id */) 108 109 // Updates the plugin location. 110 IPC_MESSAGE_ROUTED1(PluginMsg_UpdateGeometry, 111 PluginMsg_UpdateGeometry_Param) 112 113 // A synchronous version of above. 114 IPC_SYNC_MESSAGE_ROUTED1_0(PluginMsg_UpdateGeometrySync, 115 PluginMsg_UpdateGeometry_Param) 116 117 IPC_SYNC_MESSAGE_ROUTED1_0(PluginMsg_SetFocus, 118 bool /* focused */) 119 120 IPC_SYNC_MESSAGE_ROUTED1_2(PluginMsg_HandleInputEvent, 121 IPC::WebInputEventPointer /* event */, 122 bool /* handled */, 123 WebCursor /* cursor type*/) 124 125 IPC_MESSAGE_ROUTED1(PluginMsg_SetContentAreaFocus, 126 bool /* has_focus */) 127 128 #if defined(OS_WIN) 129 IPC_MESSAGE_ROUTED4(PluginMsg_ImeCompositionUpdated, 130 string16 /* text */, 131 std::vector<int> /* clauses */, 132 std::vector<int>, /* target */ 133 int /* cursor_position */) 134 135 IPC_MESSAGE_ROUTED1(PluginMsg_ImeCompositionCompleted, 136 string16 /* text */) 137 #endif 138 139 #if defined(OS_MACOSX) 140 IPC_MESSAGE_ROUTED1(PluginMsg_SetWindowFocus, 141 bool /* has_focus */) 142 143 IPC_MESSAGE_ROUTED0(PluginMsg_ContainerHidden) 144 145 IPC_MESSAGE_ROUTED3(PluginMsg_ContainerShown, 146 gfx::Rect /* window_frame */, 147 gfx::Rect /* view_frame */, 148 bool /* has_focus */) 149 150 IPC_MESSAGE_ROUTED2(PluginMsg_WindowFrameChanged, 151 gfx::Rect /* window_frame */, 152 gfx::Rect /* view_frame */) 153 154 IPC_MESSAGE_ROUTED1(PluginMsg_ImeCompositionCompleted, 155 string16 /* text */) 156 #endif 157 158 IPC_SYNC_MESSAGE_ROUTED3_0(PluginMsg_WillSendRequest, 159 unsigned long /* id */, 160 GURL /* url */, 161 int /* http_status_code */) 162 163 IPC_MESSAGE_ROUTED1(PluginMsg_DidReceiveResponse, 164 PluginMsg_DidReceiveResponseParams) 165 166 IPC_MESSAGE_ROUTED3(PluginMsg_DidReceiveData, 167 unsigned long /* id */, 168 std::vector<char> /* buffer */, 169 int /* data_offset */) 170 171 IPC_MESSAGE_ROUTED1(PluginMsg_DidFinishLoading, 172 unsigned long /* id */) 173 174 IPC_MESSAGE_ROUTED1(PluginMsg_DidFail, 175 unsigned long /* id */) 176 177 IPC_MESSAGE_ROUTED4(PluginMsg_SendJavaScriptStream, 178 GURL /* url */, 179 std::string /* result */, 180 bool /* success */, 181 int /* notify_id */) 182 183 IPC_MESSAGE_ROUTED2(PluginMsg_DidReceiveManualResponse, 184 GURL /* url */, 185 PluginMsg_DidReceiveResponseParams) 186 187 IPC_MESSAGE_ROUTED1(PluginMsg_DidReceiveManualData, 188 std::vector<char> /* buffer */) 189 190 IPC_MESSAGE_ROUTED0(PluginMsg_DidFinishManualLoading) 191 192 IPC_MESSAGE_ROUTED0(PluginMsg_DidManualLoadFail) 193 194 IPC_MESSAGE_ROUTED3(PluginMsg_HandleURLRequestReply, 195 unsigned long /* resource_id */, 196 GURL /* url */, 197 int /* notify_id */) 198 199 IPC_MESSAGE_ROUTED2(PluginMsg_HTTPRangeRequestReply, 200 unsigned long /* resource_id */, 201 int /* range_request_id */) 202 203 IPC_MESSAGE_CONTROL1(PluginMsg_SignalModalDialogEvent, 204 int /* render_view_id */) 205 206 IPC_MESSAGE_CONTROL1(PluginMsg_ResetModalDialogEvent, 207 int /* render_view_id */) 208 209 #if defined(OS_MACOSX) 210 // This message, used only on 10.6 and later, transmits the "fake" 211 // window handle allocated by the browser on behalf of the renderer 212 // to the GPU plugin. 213 IPC_MESSAGE_ROUTED1(PluginMsg_SetFakeAcceleratedSurfaceWindowHandle, 214 gfx::PluginWindowHandle /* window */) 215 #endif 216 217 //----------------------------------------------------------------------------- 218 // PluginHost messages 219 // These are messages sent from the plugin process to the renderer process. 220 // They all map to the corresponding WebPlugin methods. 221 // Sends the plugin window information to the renderer. 222 // The window parameter is a handle to the window if the plugin is a windowed 223 // plugin. It is NULL for windowless plugins. 224 IPC_SYNC_MESSAGE_ROUTED1_0(PluginHostMsg_SetWindow, 225 gfx::PluginWindowHandle /* window */) 226 227 #if defined(OS_WIN) 228 // The modal_loop_pump_messages_event parameter is an event handle which is 229 // passed in for windowless plugins and is used to indicate if messages 230 // are to be pumped in sync calls to the plugin process. Currently used 231 // in HandleEvent calls. 232 IPC_SYNC_MESSAGE_ROUTED2_0(PluginHostMsg_SetWindowlessData, 233 HANDLE /* modal_loop_pump_messages_event */, 234 gfx::NativeViewId /* dummy_activation_window*/) 235 236 // Send the IME status retrieved from a windowless plug-in. A windowless plug-in 237 // uses the IME attached to a browser process as a renderer does. A plug-in 238 // sends this message to control the IME status of a browser process. I would 239 // note that a plug-in sends this message to a renderer process that hosts this 240 // plug-in (not directly to a browser process) so the renderer process can 241 // update its IME status. 242 IPC_MESSAGE_ROUTED2(PluginHostMsg_NotifyIMEStatus, 243 int /* input_type */, 244 gfx::Rect /* caret_rect */) 245 #endif 246 247 IPC_MESSAGE_ROUTED1(PluginHostMsg_URLRequest, 248 PluginHostMsg_URLRequest_Params) 249 250 IPC_MESSAGE_ROUTED1(PluginHostMsg_CancelResource, 251 int /* id */) 252 253 IPC_MESSAGE_ROUTED1(PluginHostMsg_InvalidateRect, 254 gfx::Rect /* rect */) 255 256 IPC_SYNC_MESSAGE_ROUTED1_1(PluginHostMsg_GetWindowScriptNPObject, 257 int /* route id */, 258 bool /* success */) 259 260 IPC_SYNC_MESSAGE_ROUTED1_1(PluginHostMsg_GetPluginElement, 261 int /* route id */, 262 bool /* success */) 263 264 IPC_SYNC_MESSAGE_ROUTED1_2(PluginHostMsg_ResolveProxy, 265 GURL /* url */, 266 bool /* result */, 267 std::string /* proxy list */) 268 269 IPC_MESSAGE_ROUTED3(PluginHostMsg_SetCookie, 270 GURL /* url */, 271 GURL /* first_party_for_cookies */, 272 std::string /* cookie */) 273 274 IPC_SYNC_MESSAGE_ROUTED2_1(PluginHostMsg_GetCookies, 275 GURL /* url */, 276 GURL /* first_party_for_cookies */, 277 std::string /* cookies */) 278 279 IPC_MESSAGE_ROUTED0(PluginHostMsg_CancelDocumentLoad) 280 281 IPC_MESSAGE_ROUTED3(PluginHostMsg_InitiateHTTPRangeRequest, 282 std::string /* url */, 283 std::string /* range_info */, 284 int /* range_request_id */) 285 286 IPC_MESSAGE_ROUTED2(PluginHostMsg_DeferResourceLoading, 287 unsigned long /* resource_id */, 288 bool /* defer */) 289 290 IPC_SYNC_MESSAGE_CONTROL1_0(PluginHostMsg_SetException, 291 std::string /* message */) 292 293 IPC_MESSAGE_CONTROL0(PluginHostMsg_PluginShuttingDown) 294 295 #if defined(OS_MACOSX) 296 IPC_MESSAGE_ROUTED1(PluginHostMsg_FocusChanged, 297 bool /* focused */) 298 299 IPC_MESSAGE_ROUTED0(PluginHostMsg_StartIme) 300 301 //---------------------------------------------------------------------- 302 // Core Animation plugin implementation rendering via compositor. 303 304 // Notifies the renderer process that this plugin will be using the 305 // accelerated rendering path. 306 IPC_MESSAGE_ROUTED0(PluginHostMsg_AcceleratedPluginEnabledRendering) 307 308 // Notifies the renderer process that the plugin allocated a new 309 // IOSurface into which it is rendering. The renderer process forwards 310 // this IOSurface to the GPU process, causing it to be bound to a 311 // texture from which the compositor can render. Any previous 312 // IOSurface allocated by this plugin must be implicitly released by 313 // the receipt of this message. 314 IPC_MESSAGE_ROUTED3(PluginHostMsg_AcceleratedPluginAllocatedIOSurface, 315 int32 /* width */, 316 int32 /* height */, 317 uint32 /* surface_id */) 318 319 // Notifies the renderer process that the plugin produced a new frame 320 // of content into its IOSurface, and therefore that the compositor 321 // needs to redraw. 322 IPC_MESSAGE_ROUTED0(PluginHostMsg_AcceleratedPluginSwappedIOSurface) 323 #endif 324 325 IPC_MESSAGE_ROUTED2(PluginHostMsg_URLRedirectResponse, 326 bool /* allow */, 327 int /* resource_id */) 328 329 330 //----------------------------------------------------------------------------- 331 // NPObject messages 332 // These are messages used to marshall NPObjects. They are sent both from the 333 // plugin to the renderer and from the renderer to the plugin. 334 IPC_SYNC_MESSAGE_ROUTED0_0(NPObjectMsg_Release) 335 336 IPC_SYNC_MESSAGE_ROUTED1_1(NPObjectMsg_HasMethod, 337 content::NPIdentifier_Param /* name */, 338 bool /* result */) 339 340 IPC_SYNC_MESSAGE_ROUTED3_2(NPObjectMsg_Invoke, 341 bool /* is_default */, 342 content::NPIdentifier_Param /* method */, 343 std::vector<content::NPVariant_Param> /* args */, 344 content::NPVariant_Param /* result_param */, 345 bool /* result */) 346 347 IPC_SYNC_MESSAGE_ROUTED1_1(NPObjectMsg_HasProperty, 348 content::NPIdentifier_Param /* name */, 349 bool /* result */) 350 351 IPC_SYNC_MESSAGE_ROUTED1_2(NPObjectMsg_GetProperty, 352 content::NPIdentifier_Param /* name */, 353 content::NPVariant_Param /* property */, 354 bool /* result */) 355 356 IPC_SYNC_MESSAGE_ROUTED2_1(NPObjectMsg_SetProperty, 357 content::NPIdentifier_Param /* name */, 358 content::NPVariant_Param /* property */, 359 bool /* result */) 360 361 IPC_SYNC_MESSAGE_ROUTED1_1(NPObjectMsg_RemoveProperty, 362 content::NPIdentifier_Param /* name */, 363 bool /* result */) 364 365 IPC_SYNC_MESSAGE_ROUTED0_0(NPObjectMsg_Invalidate) 366 367 IPC_SYNC_MESSAGE_ROUTED0_2(NPObjectMsg_Enumeration, 368 std::vector<content::NPIdentifier_Param> /* value */, 369 bool /* result */) 370 371 IPC_SYNC_MESSAGE_ROUTED1_2(NPObjectMsg_Construct, 372 std::vector<content::NPVariant_Param> /* args */, 373 content::NPVariant_Param /* result_param */, 374 bool /* result */) 375 376 IPC_SYNC_MESSAGE_ROUTED2_2(NPObjectMsg_Evaluate, 377 std::string /* script */, 378 bool /* popups_allowed */, 379 content::NPVariant_Param /* result_param */, 380 bool /* result */) 381