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