| // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/shared_memory.h" |
| #include "build/build_config.h" |
| #include "gfx/native_widget_types.h" |
| #include "ipc/ipc_message_macros.h" |
| #include "webkit/glue/webcursor.h" |
| |
| #if defined(OS_POSIX) |
| #include "base/file_descriptor_posix.h" |
| #endif |
| |
| //----------------------------------------------------------------------------- |
| // PluginProcess messages |
| // These are messages sent from the browser to the plugin process. |
| IPC_BEGIN_MESSAGES(PluginProcess) |
| // Tells the plugin process to create a new channel for communication with a |
| // given renderer. The channel name is returned in a |
| // PluginProcessHostMsg_ChannelCreated message. The renderer ID is passed so |
| // that the plugin process reuses an existing channel to that process if it |
| // exists. This ID is a unique opaque identifier generated by the browser |
| // process. |
| IPC_MESSAGE_CONTROL2(PluginProcessMsg_CreateChannel, |
| int /* renderer_id */, |
| bool /* off_the_record */) |
| |
| // Allows a chrome plugin loaded in the browser process to send arbitrary |
| // data to an instance of the same plugin loaded in a plugin process. |
| IPC_MESSAGE_CONTROL1(PluginProcessMsg_PluginMessage, |
| std::vector<uint8> /* opaque data */) |
| |
| // Tells the plugin process to notify every connected renderer of the pending |
| // shutdown, so we don't mistake it for a crash. |
| IPC_MESSAGE_CONTROL0(PluginProcessMsg_NotifyRenderersOfPendingShutdown) |
| |
| // The following messages are used by all child processes, even though they |
| // are listed under PluginProcess. It seems overkill to define ChildProcess. |
| // Tells the child process it should stop. |
| IPC_MESSAGE_CONTROL0(PluginProcessMsg_AskBeforeShutdown) |
| |
| // Sent in response to PluginProcessHostMsg_ShutdownRequest to tell the child |
| // process that it's safe to shutdown. |
| IPC_MESSAGE_CONTROL0(PluginProcessMsg_Shutdown) |
| |
| #if defined(IPC_MESSAGE_LOG_ENABLED) |
| // Tell the child process to begin or end IPC message logging. |
| // Like above, this is used by all ChildProcesses. |
| IPC_MESSAGE_CONTROL1(PluginProcessMsg_SetIPCLoggingEnabled, |
| bool /* on or off */) |
| #endif |
| |
| IPC_END_MESSAGES(PluginProcess) |
| |
| |
| //----------------------------------------------------------------------------- |
| // PluginProcessHost messages |
| // These are messages sent from the plugin process to the browser process. |
| IPC_BEGIN_MESSAGES(PluginProcessHost) |
| // Response to a PluginProcessMsg_CreateChannel message. |
| IPC_MESSAGE_CONTROL1(PluginProcessHostMsg_ChannelCreated, |
| IPC::ChannelHandle /* channel_handle */) |
| |
| IPC_SYNC_MESSAGE_CONTROL0_1(PluginProcessHostMsg_GetPluginFinderUrl, |
| std::string /* plugin finder URL */) |
| |
| IPC_MESSAGE_CONTROL0(PluginProcessHostMsg_ShutdownRequest) |
| |
| // Allows a chrome plugin loaded in a plugin process to send arbitrary |
| // data to an instance of the same plugin loaded in the browser process. |
| IPC_MESSAGE_CONTROL1(PluginProcessHostMsg_PluginMessage, |
| std::vector<uint8> /* opaque data */) |
| |
| // Allows a chrome plugin loaded in a plugin process to send arbitrary |
| // data to an instance of the same plugin loaded in the browser process. |
| IPC_SYNC_MESSAGE_CONTROL1_1(PluginProcessHostMsg_PluginSyncMessage, |
| std::vector<uint8> /* opaque data */, |
| std::vector<uint8> /* opaque data response */) |
| |
| // Used to get cookies for the given URL. The request_context is a |
| // CPBrowsingContext, but is passed as int32 to avoid compilation errors. |
| IPC_SYNC_MESSAGE_CONTROL2_1(PluginProcessHostMsg_GetCookies, |
| int32 /* request_context */, |
| GURL /* url */, |
| std::string /* cookies */) |
| |
| // Used by the plugin process to verify that its renderer |renderer_id| has |
| // permission to access the given |files|. |
| IPC_SYNC_MESSAGE_CONTROL2_1(PluginProcessHostMsg_AccessFiles, |
| int /* renderer_id */, |
| std::vector<std::string> /* files */, |
| bool /* allowed */) |
| |
| // Get the list of proxies to use for |url|, as a semicolon delimited list |
| // of "<TYPE> <HOST>:<PORT>" | "DIRECT". See also ViewHostMsg_ResolveProxy |
| // which does the same thing. |
| IPC_SYNC_MESSAGE_CONTROL1_2(PluginProcessHostMsg_ResolveProxy, |
| GURL /* url */, |
| int /* network error */, |
| std::string /* proxy list */) |
| |
| #if defined(OS_WIN) |
| // Creates a child window of the given parent window on the UI thread. |
| IPC_SYNC_MESSAGE_CONTROL1_1(PluginProcessHostMsg_CreateWindow, |
| HWND /* parent */, |
| HWND /* child */) |
| |
| // Destroys the given window's parent on the UI thread. |
| IPC_MESSAGE_CONTROL2(PluginProcessHostMsg_PluginWindowDestroyed, |
| HWND /* window */, |
| HWND /* parent */) |
| |
| IPC_MESSAGE_ROUTED3(PluginProcessHostMsg_DownloadUrl, |
| std::string /* URL */, |
| int /* process id */, |
| HWND /* caller window */) |
| #endif |
| |
| #if defined(USE_X11) |
| // On X11, the mapping between NativeViewId and X window ids |
| // is known only to the browser. This message lets the plugin process |
| // ask about a NativeViewId that was provided by the renderer. |
| // It will get 0 back if it's a bogus input. |
| IPC_SYNC_MESSAGE_CONTROL1_1(PluginProcessHostMsg_MapNativeViewId, |
| gfx::NativeViewId /* input: native view id */, |
| gfx::PluginWindowHandle /* output: X window id */) |
| #endif |
| |
| #if defined(OS_MACOSX) |
| // On Mac OS X, we need the browser to keep track of plugin windows so |
| // that it can add and remove them from stacking groups, hide and show the |
| // menu bar, etc. We pass the window rect for convenience so that the |
| // browser can easily tell if the window is fullscreen. |
| |
| // Notifies the browser that the plugin has selected a window (i.e., brought |
| // it to the front and wants it to have keyboard focus). |
| IPC_MESSAGE_CONTROL3(PluginProcessHostMsg_PluginSelectWindow, |
| uint32 /* window ID */, |
| gfx::Rect /* window rect */, |
| bool /* modal */) |
| |
| // Notifies the browser that the plugin has shown a window. |
| IPC_MESSAGE_CONTROL3(PluginProcessHostMsg_PluginShowWindow, |
| uint32 /* window ID */, |
| gfx::Rect /* window rect */, |
| bool /* modal */) |
| |
| // Notifies the browser that the plugin has hidden a window. |
| IPC_MESSAGE_CONTROL2(PluginProcessHostMsg_PluginHideWindow, |
| uint32 /* window ID */, |
| gfx::Rect /* window rect */) |
| |
| // Notifies the browser that a plugin instance has requested a cursor |
| // visibility change. |
| IPC_MESSAGE_CONTROL1(PluginProcessHostMsg_PluginSetCursorVisibility, |
| bool /* cursor visibility */) |
| #endif |
| |
| IPC_END_MESSAGES(PluginProcessHost) |
| |
| |
| //----------------------------------------------------------------------------- |
| // Plugin messages |
| // These are messages sent from the renderer process to the plugin process. |
| IPC_BEGIN_MESSAGES(Plugin) |
| // Tells the plugin process to create a new plugin instance with the given |
| // id. A corresponding WebPluginDelegateStub is created which hosts the |
| // WebPluginDelegateImpl. |
| IPC_SYNC_MESSAGE_CONTROL1_1(PluginMsg_CreateInstance, |
| std::string /* mime_type */, |
| int /* instance_id */) |
| |
| // The WebPluginDelegateProxy sends this to the WebPluginDelegateStub in its |
| // destructor, so that the stub deletes the actual WebPluginDelegateImpl |
| // object that it's hosting. |
| IPC_SYNC_MESSAGE_CONTROL1_0(PluginMsg_DestroyInstance, |
| int /* instance_id */) |
| |
| IPC_SYNC_MESSAGE_CONTROL0_1(PluginMsg_GenerateRouteID, |
| int /* id */) |
| |
| // The messages below all map to WebPluginDelegate methods. |
| IPC_SYNC_MESSAGE_ROUTED1_1(PluginMsg_Init, |
| PluginMsg_Init_Params, |
| bool /* result */) |
| |
| // Used to synchronously request a paint for windowless plugins. |
| IPC_SYNC_MESSAGE_ROUTED1_0(PluginMsg_Paint, |
| gfx::Rect /* damaged_rect */) |
| |
| // Sent by the renderer after it paints from its backing store so that the |
| // plugin knows it can send more invalidates. |
| IPC_MESSAGE_ROUTED0(PluginMsg_DidPaint) |
| |
| IPC_SYNC_MESSAGE_ROUTED0_2(PluginMsg_Print, |
| base::SharedMemoryHandle /* shared_memory*/, |
| uint32 /* size */) |
| |
| IPC_SYNC_MESSAGE_ROUTED0_1(PluginMsg_GetPluginScriptableObject, |
| int /* route_id */) |
| |
| IPC_MESSAGE_ROUTED3(PluginMsg_DidFinishLoadWithReason, |
| GURL /* url */, |
| int /* reason */, |
| int /* notify_id */) |
| |
| // Updates the plugin location. |
| IPC_MESSAGE_ROUTED1(PluginMsg_UpdateGeometry, |
| PluginMsg_UpdateGeometry_Param) |
| |
| // A synchronous version of above. |
| IPC_SYNC_MESSAGE_ROUTED1_0(PluginMsg_UpdateGeometrySync, |
| PluginMsg_UpdateGeometry_Param) |
| |
| IPC_SYNC_MESSAGE_ROUTED1_0(PluginMsg_SetFocus, |
| bool /* focused */) |
| |
| IPC_SYNC_MESSAGE_ROUTED1_2(PluginMsg_HandleInputEvent, |
| IPC::WebInputEventPointer /* event */, |
| bool /* handled */, |
| WebCursor /* cursor type*/) |
| |
| #if defined(OS_MACOSX) |
| IPC_MESSAGE_ROUTED1(PluginMsg_SetWindowFocus, |
| bool /* has_focus */) |
| |
| IPC_MESSAGE_ROUTED1(PluginMsg_SetContentAreaFocus, |
| bool /* has_focus */) |
| |
| IPC_MESSAGE_ROUTED0(PluginMsg_ContainerHidden) |
| |
| IPC_MESSAGE_ROUTED3(PluginMsg_ContainerShown, |
| gfx::Rect /* window_frame */, |
| gfx::Rect /* view_frame */, |
| bool /* has_focus */) |
| |
| IPC_MESSAGE_ROUTED2(PluginMsg_WindowFrameChanged, |
| gfx::Rect /* window_frame */, |
| gfx::Rect /* view_frame */) |
| #endif |
| |
| IPC_SYNC_MESSAGE_ROUTED2_0(PluginMsg_WillSendRequest, |
| unsigned long /* id */, |
| GURL /* url */) |
| |
| IPC_MESSAGE_ROUTED1(PluginMsg_DidReceiveResponse, |
| PluginMsg_DidReceiveResponseParams) |
| |
| IPC_MESSAGE_ROUTED3(PluginMsg_DidReceiveData, |
| unsigned long /* id */, |
| std::vector<char> /* buffer */, |
| int /* data_offset */) |
| |
| IPC_MESSAGE_ROUTED1(PluginMsg_DidFinishLoading, |
| unsigned long /* id */) |
| |
| IPC_MESSAGE_ROUTED1(PluginMsg_DidFail, |
| unsigned long /* id */) |
| |
| IPC_MESSAGE_ROUTED4(PluginMsg_SendJavaScriptStream, |
| GURL /* url */, |
| std::string /* result */, |
| bool /* success */, |
| int /* notify_id */) |
| |
| IPC_MESSAGE_ROUTED2(PluginMsg_DidReceiveManualResponse, |
| GURL /* url */, |
| PluginMsg_DidReceiveResponseParams) |
| |
| IPC_MESSAGE_ROUTED1(PluginMsg_DidReceiveManualData, |
| std::vector<char> /* buffer */) |
| |
| IPC_MESSAGE_ROUTED0(PluginMsg_DidFinishManualLoading) |
| |
| IPC_MESSAGE_ROUTED0(PluginMsg_DidManualLoadFail) |
| |
| IPC_MESSAGE_ROUTED0(PluginMsg_InstallMissingPlugin) |
| |
| IPC_MESSAGE_ROUTED3(PluginMsg_HandleURLRequestReply, |
| unsigned long /* resource_id */, |
| GURL /* url */, |
| int /* notify_id */) |
| |
| IPC_MESSAGE_ROUTED2(PluginMsg_HTTPRangeRequestReply, |
| unsigned long /* resource_id */, |
| int /* range_request_id */) |
| |
| IPC_SYNC_MESSAGE_ROUTED0_1(PluginMsg_CreateCommandBuffer, |
| int /* route_id */) |
| |
| IPC_MESSAGE_ROUTED0(PluginMsg_DestroyCommandBuffer) |
| |
| IPC_MESSAGE_CONTROL1(PluginMsg_SignalModalDialogEvent, |
| gfx::NativeViewId /* containing_window */) |
| |
| IPC_MESSAGE_CONTROL1(PluginMsg_ResetModalDialogEvent, |
| gfx::NativeViewId /* containing_window */) |
| |
| #if defined(OS_MACOSX) |
| // This message, used only on 10.6 and later, transmits the "fake" |
| // window handle allocated by the browser on behalf of the renderer |
| // to the GPU plugin. |
| IPC_MESSAGE_ROUTED1(PluginMsg_SetFakeAcceleratedSurfaceWindowHandle, |
| gfx::PluginWindowHandle /* window */) |
| #endif |
| |
| IPC_END_MESSAGES(Plugin) |
| |
| |
| //----------------------------------------------------------------------------- |
| // PluginHost messages |
| // These are messages sent from the plugin process to the renderer process. |
| // They all map to the corresponding WebPlugin methods. |
| IPC_BEGIN_MESSAGES(PluginHost) |
| // Sends the plugin window information to the renderer. |
| // The window parameter is a handle to the window if the plugin is a windowed |
| // plugin. It is NULL for windowless plugins. |
| IPC_SYNC_MESSAGE_ROUTED1_0(PluginHostMsg_SetWindow, |
| gfx::PluginWindowHandle /* window */) |
| |
| #if defined(OS_WIN) |
| // The modal_loop_pump_messages_event parameter is an event handle which is |
| // passed in for windowless plugins and is used to indicate if messages |
| // are to be pumped in sync calls to the plugin process. Currently used |
| // in HandleEvent calls. |
| IPC_SYNC_MESSAGE_ROUTED1_0(PluginHostMsg_SetWindowlessPumpEvent, |
| HANDLE /* modal_loop_pump_messages_event */) |
| #endif |
| |
| IPC_MESSAGE_ROUTED1(PluginHostMsg_URLRequest, |
| PluginHostMsg_URLRequest_Params) |
| |
| IPC_MESSAGE_ROUTED1(PluginHostMsg_CancelResource, |
| int /* id */) |
| |
| IPC_MESSAGE_ROUTED1(PluginHostMsg_InvalidateRect, |
| gfx::Rect /* rect */) |
| |
| IPC_SYNC_MESSAGE_ROUTED1_1(PluginHostMsg_GetWindowScriptNPObject, |
| int /* route id */, |
| bool /* success */) |
| |
| IPC_SYNC_MESSAGE_ROUTED1_1(PluginHostMsg_GetPluginElement, |
| int /* route id */, |
| bool /* success */) |
| |
| IPC_MESSAGE_ROUTED3(PluginHostMsg_SetCookie, |
| GURL /* url */, |
| GURL /* first_party_for_cookies */, |
| std::string /* cookie */) |
| |
| IPC_SYNC_MESSAGE_ROUTED2_1(PluginHostMsg_GetCookies, |
| GURL /* url */, |
| GURL /* first_party_for_cookies */, |
| std::string /* cookies */) |
| |
| // Asks the browser to show a modal HTML dialog. The dialog is passed the |
| // given arguments as a JSON string, and returns its result as a JSON string |
| // through json_retval. |
| IPC_SYNC_MESSAGE_ROUTED4_1(PluginHostMsg_ShowModalHTMLDialog, |
| GURL /* url */, |
| int /* width */, |
| int /* height */, |
| std::string /* json_arguments */, |
| std::string /* json_retval */) |
| |
| IPC_SYNC_MESSAGE_ROUTED2_2(PluginHostMsg_GetDragData, |
| NPVariant_Param /* event */, |
| bool /* add_data */, |
| std::vector<NPVariant_Param> /* result_values */, |
| bool /* result_success */) |
| |
| IPC_SYNC_MESSAGE_ROUTED2_1(PluginHostMsg_SetDropEffect, |
| NPVariant_Param /* event */, |
| int /* effect */, |
| bool /* result_success */) |
| |
| IPC_MESSAGE_ROUTED1(PluginHostMsg_MissingPluginStatus, |
| int /* status */) |
| |
| IPC_SYNC_MESSAGE_ROUTED0_1(PluginHostMsg_GetCPBrowsingContext, |
| uint32 /* context */) |
| |
| IPC_MESSAGE_ROUTED0(PluginHostMsg_CancelDocumentLoad) |
| |
| IPC_MESSAGE_ROUTED3(PluginHostMsg_InitiateHTTPRangeRequest, |
| std::string /* url */, |
| std::string /* range_info */, |
| int /* range_request_id */) |
| |
| IPC_MESSAGE_ROUTED2(PluginHostMsg_DeferResourceLoading, |
| unsigned long /* resource_id */, |
| bool /* defer */) |
| |
| IPC_SYNC_MESSAGE_CONTROL1_0(PluginHostMsg_SetException, |
| std::string /* message */) |
| |
| IPC_MESSAGE_CONTROL0(PluginHostMsg_PluginShuttingDown) |
| |
| #if defined(OS_MACOSX) |
| IPC_MESSAGE_ROUTED1(PluginHostMsg_UpdateGeometry_ACK, |
| int /* ack_key */) |
| |
| // This message, used in Mac OS X 10.5 and earlier, is sent from the plug-in |
| // process to the renderer process to indicate that the plug-in allocated a |
| // new TransportDIB that holds the GPU's rendered image. This information is |
| // then forwarded to the browser process via a similar message. |
| IPC_MESSAGE_ROUTED4(PluginHostMsg_AcceleratedSurfaceSetTransportDIB, |
| gfx::PluginWindowHandle /* window */, |
| int32 /* width */, |
| int32 /* height */, |
| TransportDIB::Handle /* handle to the TransportDIB */) |
| |
| // Synthesize a fake window handle for the plug-in to identify the instance |
| // to the browser, allowing mapping to a surface for hardware accelleration |
| // of plug-in content. The browser generates the handle which is then set on |
| // the plug-in. |opaque| indicates whether the content should be treated as |
| // opaque. |
| IPC_MESSAGE_ROUTED1(PluginHostMsg_BindFakePluginWindowHandle, |
| bool /* opaque */) |
| |
| // This message, used only on 10.6 and later, is sent from the plug-in process |
| // to the renderer process to indicate that the plugin allocated a new |
| // IOSurface object of the given width and height. This information is then |
| // forwarded on to the browser process. |
| // |
| // NOTE: the original intent was to pass a mach port as the IOSurface |
| // identifier but it looks like that will be a lot of work. For now we pass an |
| // ID from IOSurfaceGetID. |
| IPC_MESSAGE_ROUTED4(PluginHostMsg_AcceleratedSurfaceSetIOSurface, |
| gfx::PluginWindowHandle /* window */, |
| int32 /* width */, |
| int32 /* height */, |
| uint64 /* identifier for IOSurface */) |
| |
| |
| // On the Mac, shared memory can't be allocated in the sandbox, so |
| // the TransportDIB used by the plug-in for rendering has to be allocated |
| // and managed by the browser. This is a synchronous message, use with care. |
| IPC_SYNC_MESSAGE_ROUTED1_1(PluginHostMsg_AllocTransportDIB, |
| size_t /* requested memory size */, |
| TransportDIB::Handle /* output: DIB handle */) |
| |
| // Since the browser keeps handles to the allocated transport DIBs, this |
| // message is sent to tell the browser that it may release them when the |
| // renderer is finished with them. |
| IPC_MESSAGE_ROUTED1(PluginHostMsg_FreeTransportDIB, |
| TransportDIB::Id /* DIB id */) |
| |
| // This message notifies the renderer process (and from there the |
| // browser process) that the plug-in swapped the buffers associated |
| // with the given "window", which should cause the browser to redraw |
| // the various plug-ins' contents. |
| IPC_MESSAGE_ROUTED1(PluginHostMsg_AcceleratedSurfaceBuffersSwapped, |
| gfx::PluginWindowHandle /* window */) |
| #endif |
| |
| IPC_END_MESSAGES(PluginHost) |
| |
| //----------------------------------------------------------------------------- |
| // NPObject messages |
| // These are messages used to marshall NPObjects. They are sent both from the |
| // plugin to the renderer and from the renderer to the plugin. |
| IPC_BEGIN_MESSAGES(NPObject) |
| IPC_SYNC_MESSAGE_ROUTED0_0(NPObjectMsg_Release) |
| |
| IPC_SYNC_MESSAGE_ROUTED1_1(NPObjectMsg_HasMethod, |
| NPIdentifier_Param /* name */, |
| bool /* result */) |
| |
| IPC_SYNC_MESSAGE_ROUTED3_2(NPObjectMsg_Invoke, |
| bool /* is_default */, |
| NPIdentifier_Param /* method */, |
| std::vector<NPVariant_Param> /* args */, |
| NPVariant_Param /* result_param */, |
| bool /* result */) |
| |
| IPC_SYNC_MESSAGE_ROUTED1_1(NPObjectMsg_HasProperty, |
| NPIdentifier_Param /* name */, |
| bool /* result */) |
| |
| IPC_SYNC_MESSAGE_ROUTED1_2(NPObjectMsg_GetProperty, |
| NPIdentifier_Param /* name */, |
| NPVariant_Param /* property */, |
| bool /* result */) |
| |
| IPC_SYNC_MESSAGE_ROUTED2_1(NPObjectMsg_SetProperty, |
| NPIdentifier_Param /* name */, |
| NPVariant_Param /* property */, |
| bool /* result */) |
| |
| IPC_SYNC_MESSAGE_ROUTED1_1(NPObjectMsg_RemoveProperty, |
| NPIdentifier_Param /* name */, |
| bool /* result */) |
| |
| IPC_SYNC_MESSAGE_ROUTED0_0(NPObjectMsg_Invalidate) |
| |
| IPC_SYNC_MESSAGE_ROUTED0_2(NPObjectMsg_Enumeration, |
| std::vector<NPIdentifier_Param> /* value */, |
| bool /* result */) |
| |
| IPC_SYNC_MESSAGE_ROUTED1_2(NPObjectMsg_Construct, |
| std::vector<NPVariant_Param> /* args */, |
| NPVariant_Param /* result_param */, |
| bool /* result */) |
| |
| IPC_SYNC_MESSAGE_ROUTED2_2(NPObjectMsg_Evaluate, |
| std::string /* script */, |
| bool /* popups_allowed */, |
| NPVariant_Param /* result_param */, |
| bool /* result */) |
| |
| IPC_END_MESSAGES(NPObject) |