summaryrefslogtreecommitdiffstats
path: root/chrome/plugin/chrome_plugin_host.cc
diff options
context:
space:
mode:
authormichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-13 19:22:56 +0000
committermichaeln@google.com <michaeln@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-05-13 19:22:56 +0000
commit0167204bc9a6f6873af4b92c8f0969d5ae465088 (patch)
tree95e5e2d475da2c25152ebe31689fc8e1f74acf16 /chrome/plugin/chrome_plugin_host.cc
parent89518924aa928807e7d5daf4d59fdb969cd19494 (diff)
downloadchromium_src-0167204bc9a6f6873af4b92c8f0969d5ae465088.zip
chromium_src-0167204bc9a6f6873af4b92c8f0969d5ae465088.tar.gz
chromium_src-0167204bc9a6f6873af4b92c8f0969d5ae465088.tar.bz2
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
Diffstat (limited to 'chrome/plugin/chrome_plugin_host.cc')
-rw-r--r--chrome/plugin/chrome_plugin_host.cc37
1 files changed, 37 insertions, 0 deletions
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;