From 689a342b0f8badbc87e67938f7a2fd3798e6f8eb Mon Sep 17 00:00:00 2001 From: Steve Block Date: Tue, 7 Dec 2010 18:18:26 +0000 Subject: [PATCH] Add WebView.removeJavascriptInterface() Bug: 3234178 Change-Id: I7136f8d76b20f90a7e9e1c55b6755ffe6c35b77b --- api/current.xml | 13 +++++++++++++ core/java/android/webkit/BrowserFrame.java | 9 ++++++++- core/java/android/webkit/WebView.java | 13 ++++++++++++- core/java/android/webkit/WebViewCore.java | 9 +++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/api/current.xml b/api/current.xml index 708a852884b17..e63e82c49419e 100644 --- a/api/current.xml +++ b/api/current.xml @@ -227783,6 +227783,19 @@ visibility="public" > + + + + (); } + 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 44655aece880b..bf8f7dba37f64 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -3523,7 +3523,8 @@ public class WebView extends AbsoluteLayout *

* @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) { @@ -3535,6 +3536,16 @@ public class WebView extends AbsoluteLayout mWebViewCore.sendMessage(EventHub.ADD_JS_INTERFACE, arg); } + /** + * 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. diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index cc94fd03f57d3..d2c7fce2e20a1 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);