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.
5 // Multiply-included message header, no traditional include guard.
9 #include "base/basictypes.h"
10 #include "base/process/process.h"
11 #include "base/values.h"
12 #include "content/common/content_export.h"
13 #include "content/common/content_param_traits.h"
14 #include "content/common/cursors/webcursor.h"
15 #include "content/common/edit_command.h"
16 #include "content/common/frame_param_macros.h"
17 #include "content/public/common/common_param_traits.h"
18 #include "content/public/common/drop_data.h"
19 #include "ipc/ipc_channel_handle.h"
20 #include "ipc/ipc_message_macros.h"
21 #include "ipc/ipc_message_utils.h"
22 #include "third_party/WebKit/public/web/WebCompositionUnderline.h"
23 #include "third_party/WebKit/public/web/WebDragOperation.h"
24 #include "third_party/WebKit/public/web/WebDragStatus.h"
25 #include "third_party/skia/include/core/SkBitmap.h"
26 #include "ui/gfx/point.h"
27 #include "ui/gfx/rect.h"
28 #include "ui/gfx/size.h"
31 #undef IPC_MESSAGE_EXPORT
32 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT
34 #define IPC_MESSAGE_START BrowserPluginMsgStart
37 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebDragStatus, blink::WebDragStatusLast)
39 IPC_STRUCT_BEGIN(BrowserPluginHostMsg_AutoSize_Params)
40 IPC_STRUCT_MEMBER(bool, enable)
41 IPC_STRUCT_MEMBER(gfx::Size, max_size)
42 IPC_STRUCT_MEMBER(gfx::Size, min_size)
45 IPC_STRUCT_BEGIN(BrowserPluginHostMsg_ResizeGuest_Params)
46 // Indicates whether the parameters have been populated or not.
47 IPC_STRUCT_MEMBER(bool, size_changed)
48 // The new size of guest view.
49 IPC_STRUCT_MEMBER(gfx::Size, view_size)
50 // Indicates the scale factor of the embedder WebView.
51 IPC_STRUCT_MEMBER(float, scale_factor)
52 // Indicates a request for a full repaint of the page.
53 // This is required for switching from compositing to the software
55 IPC_STRUCT_MEMBER(bool, repaint)
58 IPC_STRUCT_BEGIN(BrowserPluginHostMsg_Attach_Params)
59 IPC_STRUCT_MEMBER(bool, focused)
60 IPC_STRUCT_MEMBER(bool, visible)
61 IPC_STRUCT_MEMBER(bool, opaque)
62 IPC_STRUCT_MEMBER(GURL, embedder_frame_url)
63 IPC_STRUCT_MEMBER(BrowserPluginHostMsg_AutoSize_Params, auto_size_params)
64 IPC_STRUCT_MEMBER(BrowserPluginHostMsg_ResizeGuest_Params,
66 IPC_STRUCT_MEMBER(gfx::Point, origin)
69 IPC_STRUCT_BEGIN(BrowserPluginMsg_UpdateRect_Params)
70 // The size of the RenderView when this message was generated. This is
71 // included so the host knows how large the view is from the perspective of
72 // the renderer process. This is necessary in case a resize operation is in
73 // progress. If auto-resize is enabled, this should update the corresponding
75 IPC_STRUCT_MEMBER(gfx::Size, view_size)
77 // All the above coordinates are in DIP. This is the scale factor needed
78 // to convert them to pixels.
79 IPC_STRUCT_MEMBER(float, scale_factor)
81 // Is this UpdateRect an ACK to a resize request?
82 IPC_STRUCT_MEMBER(bool, is_resize_ack)
85 // Browser plugin messages
87 // -----------------------------------------------------------------------------
88 // These messages are from the embedder to the browser process.
90 // This message is sent from BrowserPlugin to BrowserPluginGuest to issue an
92 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_ExecuteEditCommand,
93 int /* instance_id */,
94 std::string /* command */)
96 // This message must be sent just before sending a key event.
97 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_SetEditCommandsForNextKeyEvent,
98 int /* instance_id */,
99 std::vector<content::EditCommand> /* edit_commands */)
101 // This message is sent from BrowserPlugin to BrowserPluginGuest whenever IME
102 // composition state is updated.
104 BrowserPluginHostMsg_ImeSetComposition,
105 int /* instance_id */,
106 std::string /* text */,
107 std::vector<blink::WebCompositionUnderline> /* underlines */,
108 int /* selectiont_start */,
109 int /* selection_end */)
111 // This message is sent from BrowserPlugin to BrowserPluginGuest to notify that
112 // confirming the current composition is requested.
113 IPC_MESSAGE_ROUTED3(BrowserPluginHostMsg_ImeConfirmComposition,
114 int /* instance_id */,
115 std::string /* text */,
116 bool /* keep selection */)
118 // Deletes the current selection plus the specified number of characters before
119 // and after the selection or caret.
120 IPC_MESSAGE_ROUTED3(BrowserPluginHostMsg_ExtendSelectionAndDelete,
121 int /* instance_id */,
125 // This message is sent to the browser process to enable or disable autosize
128 BrowserPluginHostMsg_SetAutoSize,
129 int /* instance_id */,
130 BrowserPluginHostMsg_AutoSize_Params /* auto_size_params */,
131 BrowserPluginHostMsg_ResizeGuest_Params /* resize_guest_params */)
133 // This message is sent to the browser process to indicate that a BrowserPlugin
134 // has taken ownership of the lifetime of the guest of the given |instance_id|.
135 // |params| is the state of the BrowserPlugin taking ownership of
136 // the guest. If a guest doesn't already exist with the given |instance_id|,
137 // a new one will be created.
138 IPC_MESSAGE_ROUTED3(BrowserPluginHostMsg_Attach,
139 int /* instance_id */,
140 BrowserPluginHostMsg_Attach_Params /* params */,
141 base::DictionaryValue /* extra_params */)
143 // Tells the guest to focus or defocus itself.
144 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_SetFocus,
145 int /* instance_id */,
148 // Sends an input event to the guest.
149 IPC_MESSAGE_ROUTED3(BrowserPluginHostMsg_HandleInputEvent,
150 int /* instance_id */,
151 gfx::Rect /* guest_window_rect */,
152 IPC::WebInputEventPointer /* event */)
154 IPC_MESSAGE_ROUTED3(BrowserPluginHostMsg_CopyFromCompositingSurfaceAck,
155 int /* instance_id */,
156 int /* request_id */,
159 // Notify the guest renderer that some resources given to the embededer
160 // are not used any more.
161 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_ReclaimCompositorResources,
162 int /* instance_id */,
163 FrameHostMsg_ReclaimCompositorResources_Params /* params */)
165 // When a BrowserPlugin has been removed from the embedder's DOM, it informs
166 // the browser process to cleanup the guest.
167 IPC_MESSAGE_ROUTED1(BrowserPluginHostMsg_PluginDestroyed,
168 int /* instance_id */)
170 // Tells the guest it has been shown or hidden.
171 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_SetVisibility,
172 int /* instance_id */,
175 // Tells the guest to change its background opacity.
176 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_SetContentsOpaque,
177 int /* instance_id */,
180 // Tells the guest that a drag event happened on the plugin.
181 IPC_MESSAGE_ROUTED5(BrowserPluginHostMsg_DragStatusUpdate,
182 int /* instance_id */,
183 blink::WebDragStatus /* drag_status */,
184 content::DropData /* drop_data */,
185 blink::WebDragOperationsMask /* operation_mask */,
186 gfx::Point /* plugin_location */)
188 // Sends a PointerLock Lock ACK to the BrowserPluginGuest.
189 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_LockMouse_ACK,
190 int /* instance_id */,
191 bool /* succeeded */)
193 // Sends a PointerLock Unlock ACK to the BrowserPluginGuest.
194 IPC_MESSAGE_ROUTED1(BrowserPluginHostMsg_UnlockMouse_ACK, int /* instance_id */)
196 // Sent when plugin's position has changed without UpdateRect.
197 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_UpdateGeometry,
198 int /* instance_id */,
199 gfx::Rect /* view_rect */)
201 // -----------------------------------------------------------------------------
202 // These messages are from the guest renderer to the browser process
204 // A embedder sends this message to the browser when it wants
205 // to resize a guest plugin container so that the guest is relaid out
206 // according to the new size.
207 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_ResizeGuest,
208 int /* instance_id*/,
209 BrowserPluginHostMsg_ResizeGuest_Params)
211 // -----------------------------------------------------------------------------
212 // These messages are from the browser process to the embedder.
214 // This message is sent in response to a completed attachment of a guest
215 // to a BrowserPlugin.
216 IPC_MESSAGE_CONTROL1(BrowserPluginMsg_Attach_ACK, int /* instance_id */);
218 // Once the swapped out guest RenderView has been created in the embedder render
219 // process, the browser process informs the embedder of its routing ID.
220 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_GuestContentWindowReady,
221 int /* instance_id */,
222 int /* source_routing_id */)
224 // When the guest crashes, the browser process informs the embedder through this
226 IPC_MESSAGE_CONTROL1(BrowserPluginMsg_GuestGone,
227 int /* instance_id */)
229 // When the user tabs to the end of the tab stops of a guest, the browser
230 // process informs the embedder to tab out of the browser plugin.
231 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_AdvanceFocus,
232 int /* instance_id */,
235 // When the guest starts/stops listening to touch events, it needs to notify the
236 // plugin in the embedder about it.
237 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_ShouldAcceptTouchEvents,
238 int /* instance_id */,
241 // Inform the embedder of the cursor the guest wishes to display.
242 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_SetCursor,
243 int /* instance_id */,
244 content::WebCursor /* cursor */)
246 // The guest has damage it wants to convey to the embedder so that it can
247 // update its backing store.
248 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_UpdateRect,
249 int /* instance_id */,
250 BrowserPluginMsg_UpdateRect_Params)
252 IPC_MESSAGE_CONTROL4(BrowserPluginMsg_CopyFromCompositingSurface,
253 int /* instance_id */,
254 int /* request_id */,
255 gfx::Rect /* source_rect */,
256 gfx::Size /* dest_size */)
258 // Guest renders into an FBO with textures provided by the embedder.
259 // BrowserPlugin shares mostly the same logic as out-of-process RenderFrames but
260 // because BrowserPlugins implement custom a second level of routing logic,
261 // the IPCs need to be annotated with an extra instance_id. These messages
262 // provide that extra id.
263 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_BuffersSwapped,
264 int /* instance_id */,
265 FrameMsg_BuffersSwapped_Params /* params */)
267 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_CompositorFrameSwapped,
268 int /* instance_id */,
269 FrameMsg_CompositorFrameSwapped_Params /* params */)
271 // Forwards a PointerLock Unlock request to the BrowserPlugin.
272 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_SetMouseLock,
273 int /* instance_id */,
276 // See comment about BrowserPluginMsg_BuffersSwapped and
277 // BrowserPluginMsg_CompositorFrameSwapped for how these related
278 // to the FrameHostMsg variants.
279 IPC_MESSAGE_ROUTED1(BrowserPluginHostMsg_BuffersSwappedACK,
280 FrameHostMsg_BuffersSwappedACK_Params /* params */)
282 // Acknowledge that we presented an ubercomp frame.
283 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_CompositorFrameSwappedACK,
284 int /* instance_id */,
285 FrameHostMsg_CompositorFrameSwappedACK_Params /* params */)