Home | History | Annotate | Download | only in browser_plugin
      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 // Multiply-included message header, no traditional include guard.
      6 
      7 #include <string>
      8 
      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"
     29 #include "url/gurl.h"
     30 
     31 #undef IPC_MESSAGE_EXPORT
     32 #define IPC_MESSAGE_EXPORT CONTENT_EXPORT
     33 
     34 #define IPC_MESSAGE_START BrowserPluginMsgStart
     35 
     36 
     37 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebDragStatus, blink::WebDragStatusLast)
     38 
     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)
     43 IPC_STRUCT_END()
     44 
     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
     54   // rendering path.
     55   IPC_STRUCT_MEMBER(bool, repaint)
     56 IPC_STRUCT_END()
     57 
     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,
     65                     resize_guest_params)
     66   IPC_STRUCT_MEMBER(gfx::Point, origin)
     67 IPC_STRUCT_END()
     68 
     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
     74   // view size.
     75   IPC_STRUCT_MEMBER(gfx::Size, view_size)
     76 
     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)
     80 
     81   // Is this UpdateRect an ACK to a resize request?
     82   IPC_STRUCT_MEMBER(bool, is_resize_ack)
     83 IPC_STRUCT_END()
     84 
     85 // Browser plugin messages
     86 
     87 // -----------------------------------------------------------------------------
     88 // These messages are from the embedder to the browser process.
     89 
     90 // This message is sent from BrowserPlugin to BrowserPluginGuest to issue an
     91 // edit command.
     92 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_ExecuteEditCommand,
     93                      int /* instance_id */,
     94                      std::string /* command */)
     95 
     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 */)
    100 
    101 // This message is sent from BrowserPlugin to BrowserPluginGuest whenever IME
    102 // composition state is updated.
    103 IPC_MESSAGE_ROUTED5(
    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 */)
    110 
    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 */)
    117 
    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 */,
    122                     int /* before */,
    123                     int /* after */)
    124 
    125 // This message is sent to the browser process to enable or disable autosize
    126 // mode.
    127 IPC_MESSAGE_ROUTED3(
    128     BrowserPluginHostMsg_SetAutoSize,
    129     int /* instance_id */,
    130     BrowserPluginHostMsg_AutoSize_Params /* auto_size_params */,
    131     BrowserPluginHostMsg_ResizeGuest_Params /* resize_guest_params */)
    132 
    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 */)
    142 
    143 // Tells the guest to focus or defocus itself.
    144 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_SetFocus,
    145                     int /* instance_id */,
    146                     bool /* enable */)
    147 
    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 */)
    153 
    154 IPC_MESSAGE_ROUTED3(BrowserPluginHostMsg_CopyFromCompositingSurfaceAck,
    155                     int /* instance_id */,
    156                     int /* request_id */,
    157                     SkBitmap);
    158 
    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 */)
    164 
    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 */)
    169 
    170 // Tells the guest it has been shown or hidden.
    171 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_SetVisibility,
    172                     int /* instance_id */,
    173                     bool /* visible */)
    174 
    175 // Tells the guest to change its background opacity.
    176 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_SetContentsOpaque,
    177                     int /* instance_id */,
    178                     bool /* opaque */)
    179 
    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 */)
    187 
    188 // Sends a PointerLock Lock ACK to the BrowserPluginGuest.
    189 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_LockMouse_ACK,
    190                     int /* instance_id */,
    191                     bool /* succeeded */)
    192 
    193 // Sends a PointerLock Unlock ACK to the BrowserPluginGuest.
    194 IPC_MESSAGE_ROUTED1(BrowserPluginHostMsg_UnlockMouse_ACK, int /* instance_id */)
    195 
    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 */)
    200 
    201 // -----------------------------------------------------------------------------
    202 // These messages are from the guest renderer to the browser process
    203 
    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)
    210 
    211 // -----------------------------------------------------------------------------
    212 // These messages are from the browser process to the embedder.
    213 
    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 */);
    217 
    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 */)
    223 
    224 // When the guest crashes, the browser process informs the embedder through this
    225 // message.
    226 IPC_MESSAGE_CONTROL1(BrowserPluginMsg_GuestGone,
    227                      int /* instance_id */)
    228 
    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 */,
    233                      bool /* reverse */)
    234 
    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 */,
    239                      bool /* accept */)
    240 
    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 */)
    245 
    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)
    251 
    252 IPC_MESSAGE_CONTROL4(BrowserPluginMsg_CopyFromCompositingSurface,
    253                      int /* instance_id */,
    254                      int /* request_id */,
    255                      gfx::Rect  /* source_rect */,
    256                      gfx::Size  /* dest_size */)
    257 
    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 */)
    266 
    267 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_CompositorFrameSwapped,
    268                      int /* instance_id */,
    269                      FrameMsg_CompositorFrameSwapped_Params /* params */)
    270 
    271 // Forwards a PointerLock Unlock request to the BrowserPlugin.
    272 IPC_MESSAGE_CONTROL2(BrowserPluginMsg_SetMouseLock,
    273                      int /* instance_id */,
    274                      bool /* enable */)
    275 
    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 */)
    281 
    282 // Acknowledge that we presented an ubercomp frame.
    283 IPC_MESSAGE_ROUTED2(BrowserPluginHostMsg_CompositorFrameSwappedACK,
    284                     int /* instance_id */,
    285                     FrameHostMsg_CompositorFrameSwappedACK_Params /* params */)
    286