summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
authorbashi@chromium.org <bashi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-13 04:11:08 +0000
committerbashi@chromium.org <bashi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-13 04:11:08 +0000
commiteeb3a533308c6a9ebe2206a57137c095bfbb2e01 (patch)
tree560972319ed77a48c35b1d00789c7ecb06b23e39 /webkit
parent34ed292032e794d0ae3ff2cf87e6e50d5dd152ea (diff)
downloadchromium_src-eeb3a533308c6a9ebe2206a57137c095bfbb2e01.zip
chromium_src-eeb3a533308c6a9ebe2206a57137c095bfbb2e01.tar.gz
chromium_src-eeb3a533308c6a9ebe2206a57137c095bfbb2e01.tar.bz2
Getting form value from NPAPI plugins.
Adds/implements a plugin IPC message which allows to get form value from plugins. We need to implement the interface on WebKit side to make this work so the CL won't affect the chromium's behavior for now. BUG=88896 TEST=compiled Review URL: http://codereview.chromium.org/7335004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92315 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r--webkit/plugins/npapi/plugin_instance.cc15
-rw-r--r--webkit/plugins/npapi/plugin_instance.h3
-rw-r--r--webkit/plugins/npapi/webplugin_delegate.h6
-rw-r--r--webkit/plugins/npapi/webplugin_delegate_impl.cc4
-rw-r--r--webkit/plugins/npapi/webplugin_delegate_impl.h1
-rw-r--r--webkit/plugins/npapi/webplugin_impl.cc10
-rw-r--r--webkit/plugins/npapi/webplugin_impl.h1
-rw-r--r--webkit/plugins/npapi/webview_plugin.cc5
-rw-r--r--webkit/plugins/npapi/webview_plugin.h1
-rw-r--r--webkit/plugins/ppapi/ppapi_webplugin_impl.cc4
-rw-r--r--webkit/plugins/ppapi/ppapi_webplugin_impl.h1
11 files changed, 49 insertions, 2 deletions
diff --git a/webkit/plugins/npapi/plugin_instance.cc b/webkit/plugins/npapi/plugin_instance.cc
index 53242af..30e16a5 100644
--- a/webkit/plugins/npapi/plugin_instance.cc
+++ b/webkit/plugins/npapi/plugin_instance.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -172,6 +172,19 @@ NPObject *PluginInstance::GetPluginScriptableObject() {
return value;
}
+bool PluginInstance::GetFormValue(string16* value) {
+ // Plugins will allocate memory for the return value by using NPN_MemAlloc().
+ char *plugin_value = NULL;
+ NPError error = NPP_GetValue(NPPVformValue, &plugin_value);
+ if (error != NPERR_NO_ERROR || !plugin_value) {
+ return false;
+ }
+ // Assumes the result is UTF8 text, as Firefox does.
+ *value = UTF8ToUTF16(plugin_value);
+ host_->host_functions()->memfree(plugin_value);
+ return true;
+}
+
// WebPluginLoadDelegate methods
void PluginInstance::DidFinishLoadWithReason(
const GURL& url, NPReason reason, int notify_id) {
diff --git a/webkit/plugins/npapi/plugin_instance.h b/webkit/plugins/npapi/plugin_instance.h
index d24bc9f..162b72e 100644
--- a/webkit/plugins/npapi/plugin_instance.h
+++ b/webkit/plugins/npapi/plugin_instance.h
@@ -152,6 +152,9 @@ class PluginInstance : public base::RefCountedThreadSafe<PluginInstance> {
// Have the plugin create it's script object.
NPObject *GetPluginScriptableObject();
+ // Returns the form value of this instance.
+ bool GetFormValue(string16* value);
+
// WebViewDelegate methods that we implement. This is for handling
// callbacks during getURLNotify.
void DidFinishLoadWithReason(const GURL& url, NPReason reason, int notify_id);
diff --git a/webkit/plugins/npapi/webplugin_delegate.h b/webkit/plugins/npapi/webplugin_delegate.h
index c3a4a04..2a89f01 100644
--- a/webkit/plugins/npapi/webplugin_delegate.h
+++ b/webkit/plugins/npapi/webplugin_delegate.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 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.
@@ -93,6 +93,10 @@ class WebPluginDelegate : public WebPlugin2DDeviceDelegate,
// Gets the NPObject associated with the plugin for scripting.
virtual NPObject* GetPluginScriptableObject() = 0;
+ // Gets the form value associated with the plugin instance.
+ // Returns false if the value is not available.
+ virtual bool GetFormValue(string16* value) = 0;
+
// Receives notification about a resource load that the plugin initiated
// for a frame.
virtual void DidFinishLoadWithReason(const GURL& url, NPReason reason,
diff --git a/webkit/plugins/npapi/webplugin_delegate_impl.cc b/webkit/plugins/npapi/webplugin_delegate_impl.cc
index 9d13b44..04f2193 100644
--- a/webkit/plugins/npapi/webplugin_delegate_impl.cc
+++ b/webkit/plugins/npapi/webplugin_delegate_impl.cc
@@ -196,6 +196,10 @@ NPObject* WebPluginDelegateImpl::GetPluginScriptableObject() {
return instance_->GetPluginScriptableObject();
}
+bool WebPluginDelegateImpl::GetFormValue(string16* value) {
+ return instance_->GetFormValue(value);
+}
+
void WebPluginDelegateImpl::DidFinishLoadWithReason(const GURL& url,
NPReason reason,
int notify_id) {
diff --git a/webkit/plugins/npapi/webplugin_delegate_impl.h b/webkit/plugins/npapi/webplugin_delegate_impl.h
index 84c74fc..26bfb65 100644
--- a/webkit/plugins/npapi/webplugin_delegate_impl.h
+++ b/webkit/plugins/npapi/webplugin_delegate_impl.h
@@ -106,6 +106,7 @@ class WebPluginDelegateImpl : public WebPluginDelegate {
virtual bool HandleInputEvent(const WebKit::WebInputEvent& event,
WebKit::WebCursorInfo* cursor_info);
virtual NPObject* GetPluginScriptableObject();
+ virtual bool GetFormValue(string16* value);
virtual void DidFinishLoadWithReason(
const GURL& url, NPReason reason, int notify_id);
virtual int GetProcessId();
diff --git a/webkit/plugins/npapi/webplugin_impl.cc b/webkit/plugins/npapi/webplugin_impl.cc
index 91eada0..17473b9 100644
--- a/webkit/plugins/npapi/webplugin_impl.cc
+++ b/webkit/plugins/npapi/webplugin_impl.cc
@@ -260,6 +260,16 @@ NPObject* WebPluginImpl::scriptableObject() {
return delegate_->GetPluginScriptableObject();
}
+bool WebPluginImpl::getFormValue(WebKit::WebString* value) {
+ if (!delegate_)
+ return false;
+ string16 form_value;
+ if (!delegate_->GetFormValue(&form_value))
+ return false;
+ *value = form_value;
+ return true;
+}
+
void WebPluginImpl::paint(WebCanvas* canvas, const WebRect& paint_rect) {
if (!delegate_ || !container_)
return;
diff --git a/webkit/plugins/npapi/webplugin_impl.h b/webkit/plugins/npapi/webplugin_impl.h
index d08332c..9eaf10c 100644
--- a/webkit/plugins/npapi/webplugin_impl.h
+++ b/webkit/plugins/npapi/webplugin_impl.h
@@ -71,6 +71,7 @@ class WebPluginImpl : public WebPlugin,
WebKit::WebPluginContainer* container);
virtual void destroy();
virtual NPObject* scriptableObject();
+ virtual bool getFormValue(WebKit::WebString* value);
virtual void paint(
WebKit::WebCanvas* canvas, const WebKit::WebRect& paint_rect);
virtual void updateGeometry(
diff --git a/webkit/plugins/npapi/webview_plugin.cc b/webkit/plugins/npapi/webview_plugin.cc
index d1df40f..cda369b 100644
--- a/webkit/plugins/npapi/webview_plugin.cc
+++ b/webkit/plugins/npapi/webview_plugin.cc
@@ -37,6 +37,7 @@ using WebKit::WebPluginContainer;
using WebKit::WebPoint;
using WebKit::WebRect;
using WebKit::WebSize;
+using WebKit::WebString;
using WebKit::WebURLError;
using WebKit::WebURLRequest;
using WebKit::WebURLResponse;
@@ -116,6 +117,10 @@ NPObject* WebViewPlugin::scriptableObject() {
return NULL;
}
+bool WebViewPlugin::getFormValue(WebString* value) {
+ return false;
+}
+
void WebViewPlugin::paint(WebCanvas* canvas, const WebRect& rect) {
gfx::Rect paintRect(rect_.Intersect(rect));
if (paintRect.IsEmpty())
diff --git a/webkit/plugins/npapi/webview_plugin.h b/webkit/plugins/npapi/webview_plugin.h
index 96e0d73..c03c8a5 100644
--- a/webkit/plugins/npapi/webview_plugin.h
+++ b/webkit/plugins/npapi/webview_plugin.h
@@ -76,6 +76,7 @@ class WebViewPlugin: public WebKit::WebPlugin, public WebKit::WebViewClient,
virtual void destroy();
virtual NPObject* scriptableObject();
+ virtual bool getFormValue(WebKit::WebString* value);
virtual void paint(WebKit::WebCanvas* canvas, const WebKit::WebRect& rect);
diff --git a/webkit/plugins/ppapi/ppapi_webplugin_impl.cc b/webkit/plugins/ppapi/ppapi_webplugin_impl.cc
index cf5066a..f99f319 100644
--- a/webkit/plugins/ppapi/ppapi_webplugin_impl.cc
+++ b/webkit/plugins/ppapi/ppapi_webplugin_impl.cc
@@ -107,6 +107,10 @@ NPObject* WebPluginImpl::scriptableObject() {
return message_channel_np_object;
}
+bool WebPluginImpl::getFormValue(WebString* value) {
+ return false;
+}
+
void WebPluginImpl::paint(WebCanvas* canvas, const WebRect& rect) {
if (!instance_->IsFullscreenOrPending())
instance_->Paint(canvas, plugin_rect_, rect);
diff --git a/webkit/plugins/ppapi/ppapi_webplugin_impl.h b/webkit/plugins/ppapi/ppapi_webplugin_impl.h
index e35471f..f47176d 100644
--- a/webkit/plugins/ppapi/ppapi_webplugin_impl.h
+++ b/webkit/plugins/ppapi/ppapi_webplugin_impl.h
@@ -41,6 +41,7 @@ class WebPluginImpl : public WebKit::WebPlugin {
virtual bool initialize(WebKit::WebPluginContainer* container);
virtual void destroy();
virtual NPObject* scriptableObject();
+ virtual bool getFormValue(WebKit::WebString* value);
virtual void paint(WebKit::WebCanvas* canvas, const WebKit::WebRect& rect);
virtual void updateGeometry(
const WebKit::WebRect& frame_rect,