diff options
| author | Steve Block <steveblock@google.com> | 2010-12-07 18:18:26 +0000 |
|---|---|---|
| committer | Steve Block <steveblock@google.com> | 2010-12-07 20:16:13 +0000 |
| commit | 689a342b0f8badbc87e67938f7a2fd3798e6f8eb (patch) | |
| tree | 1a9d214d9b4fc420c4b01470e5ba2b61124bd598 /core/java/android | |
| parent | 9aa6ea83869ee3e8c6f694ca77346168c0160149 (diff) | |
Add WebView.removeJavascriptInterface()
Bug: 3234178
Change-Id: I7136f8d76b20f90a7e9e1c55b6755ffe6c35b77b
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/webkit/BrowserFrame.java | 9 | ||||
| -rw-r--r-- | core/java/android/webkit/WebView.java | 13 | ||||
| -rw-r--r-- | core/java/android/webkit/WebViewCore.java | 9 |
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); |
