From 0167204bc9a6f6873af4b92c8f0969d5ae465088 Mon Sep 17 00:00:00 2001 From: "michaeln@google.com" Date: Wed, 13 May 2009 19:22:56 +0000 Subject: CPAPI gears drag drop and renderer IPC.... CPAPI (0.10) functions for gears drag drop; one to extract the drag type/data given an NPObject *event, one to override the drop effect (drag cursor). Gears drag drop API receives a browser event as an NPObject* so the event is untrusted. Provide IPC calls to the renderer so gears can pass the event to renderer/V8 for checking, prior to drag type/data extraction, or the setting of the drop effect. V8 event checking is a TODO(noel), http://mondrian/10947778 for the CPAPI (0.10) change submitted to gears. BUG=7995 Original patch by Noel Gordon via: http://codereview.chromium.org/99240 Review URL: http://codereview.chromium.org/115280 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15986 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/plugin/chrome_plugin_host.cc | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'chrome/plugin/chrome_plugin_host.cc') diff --git a/chrome/plugin/chrome_plugin_host.cc b/chrome/plugin/chrome_plugin_host.cc index 992afcf..4874e41 100644 --- a/chrome/plugin/chrome_plugin_host.cc +++ b/chrome/plugin/chrome_plugin_host.cc @@ -313,6 +313,41 @@ CPError STDCALL CPB_ShowHtmlDialog( return CPERR_FAILURE; } +CPError STDCALL CPB_GetDragData( + CPID id, CPBrowsingContext context, struct NPObject* event, bool add_data, + int32 *identity, int32 *event_id, char **drag_type, char **drag_data) { + CHECK(ChromePluginLib::IsPluginThread()); + + *identity = *event_id = 0; + WebPluginProxy* webplugin = WebPluginProxy::FromCPBrowsingContext(context); + if (!event || !webplugin) + return CPERR_INVALID_PARAMETER; + + std::string type_str, data_str; + if (!webplugin->GetDragData(event, add_data, + identity, event_id, &type_str, &data_str)) { + return CPERR_FAILURE; + } + + if (add_data) + *drag_data = CPB_StringDup(CPB_Alloc, data_str); + *drag_type = CPB_StringDup(CPB_Alloc, type_str); + return CPERR_SUCCESS; +} + +CPError STDCALL CPB_SetDropEffect( + CPID id, CPBrowsingContext context, struct NPObject* event, int effect) { + CHECK(ChromePluginLib::IsPluginThread()); + + WebPluginProxy* webplugin = WebPluginProxy::FromCPBrowsingContext(context); + if (!event || !webplugin) + return CPERR_INVALID_PARAMETER; + + if (webplugin->SetDropEffect(event, effect)) + return CPERR_SUCCESS; + return CPERR_FAILURE; +} + CPError STDCALL CPB_GetCommandLineArguments( CPID id, CPBrowsingContext context, const char* url, char** arguments) { CHECK(ChromePluginLib::IsPluginThread()); @@ -597,6 +632,8 @@ CPBrowserFuncs* GetCPBrowserFuncsForPlugin() { browser_funcs.send_sync_message = CPB_SendSyncMessage; browser_funcs.plugin_thread_async_call = CPB_PluginThreadAsyncCall; browser_funcs.open_file_dialog = CPB_OpenFileDialog; + browser_funcs.get_drag_data = CPB_GetDragData; + browser_funcs.set_drop_effect = CPB_SetDropEffect; browser_funcs.request_funcs = &request_funcs; browser_funcs.response_funcs = &response_funcs; -- cgit v1.1