summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-12-07 18:18:26 +0000
committerSteve Block <steveblock@google.com>2010-12-07 20:16:13 +0000
commit689a342b0f8badbc87e67938f7a2fd3798e6f8eb (patch)
tree1a9d214d9b4fc420c4b01470e5ba2b61124bd598 /core/java/android
parent9aa6ea83869ee3e8c6f694ca77346168c0160149 (diff)
Add WebView.removeJavascriptInterface()
Bug: 3234178 Change-Id: I7136f8d76b20f90a7e9e1c55b6755ffe6c35b77b
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/webkit/BrowserFrame.java9
-rw-r--r--core/java/android/webkit/WebView.java13
-rw-r--r--core/java/android/webkit/WebViewCore.java9
3 files changed, 29 insertions, 2 deletions
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index 8f9245822202..2c38c93ede6f 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -599,13 +599,20 @@ class BrowserFrame extends Handler {
public void addJavascriptInterface(Object obj, String interfaceName) {
assert obj != null;
+ removeJavascriptInterface(interfaceName);
if (mJSInterfaceMap == null) {
mJSInterfaceMap = new HashMap<String, Object>();
}
+ mJSInterfaceMap.put(interfaceName, obj);
+ }
+
+ public void removeJavascriptInterface(String interfaceName) {
+ if (mJSInterfaceMap == null) {
+ return;
+ }
if (mJSInterfaceMap.containsKey(interfaceName)) {
mJSInterfaceMap.remove(interfaceName);
}
- mJSInterfaceMap.put(interfaceName, obj);
}
/**
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index 44655aece880..bf8f7dba37f6 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -3523,7 +3523,8 @@ public class WebView extends AbsoluteLayout
* </ul></p>
* @param obj The class instance to bind to Javascript, null instances are
* ignored.
- * @param interfaceName The name to used to expose the class in JavaScript.
+ * @param interfaceName The name to used to expose the instance in
+ * JavaScript.
*/
public void addJavascriptInterface(Object obj, String interfaceName) {
if (obj == null) {
@@ -3536,6 +3537,16 @@ public class WebView extends AbsoluteLayout
}
/**
+ * Removes a previously added JavaScript interface with the given name.
+ * @param interfaceName The name of the interface to remove.
+ */
+ public void removeJavascriptInterface(String interfaceName) {
+ WebViewCore.JSInterfaceData arg = new WebViewCore.JSInterfaceData();
+ arg.mInterfaceName = interfaceName;
+ mWebViewCore.sendMessage(EventHub.REMOVE_JS_INTERFACE, arg);
+ }
+
+ /**
* Return the WebSettings object used to control the settings for this
* WebView.
* @return A WebSettings object that can be used to control this WebView's
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index cc94fd03f57d..d2c7fce2e20a 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -852,6 +852,7 @@ final class WebViewCore {
"VALID_NODE_BOUNDS", // = 146
"SAVE_WEBARCHIVE", // = 147
"WEBKIT_DRAW_LAYERS", // = 148;
+ "REMOVE_JS_INTERFACE", // = 149;
};
class EventHub {
@@ -925,6 +926,8 @@ final class WebViewCore {
// Update layers
static final int WEBKIT_DRAW_LAYERS = 148;
+ static final int REMOVE_JS_INTERFACE = 149;
+
// Network-based messaging
static final int CLEAR_SSL_PREF_TABLE = 150;
@@ -1290,6 +1293,12 @@ final class WebViewCore {
jsData.mInterfaceName);
break;
+ case REMOVE_JS_INTERFACE:
+ jsData = (JSInterfaceData) msg.obj;
+ mBrowserFrame.removeJavascriptInterface(
+ jsData.mInterfaceName);
+ break;
+
case REQUEST_EXT_REPRESENTATION:
mBrowserFrame.externalRepresentation(
(Message) msg.obj);