Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9514738 authored by Steve Block's avatar Steve Block Committed by Android (Google) Code Review
Browse files

Merge "Clean up JavaDoc for WebView.addJavascriptInterface()"

parents 0669a77f 4cd73c5b
Loading
Loading
Loading
Loading
+29 −24
Original line number Diff line number Diff line
@@ -198,10 +198,10 @@ import java.util.regex.Pattern;
 *   <li>Modifying the {@link android.webkit.WebSettings}, such as
 * enabling JavaScript with {@link android.webkit.WebSettings#setJavaScriptEnabled(boolean)
 * setJavaScriptEnabled()}. </li>
 *   <li>Adding JavaScript-to-Java interfaces with the {@link
 * android.webkit.WebView#addJavascriptInterface} method.
 *       This lets you bind Java objects into the WebView so they can be
 *       controlled from the web pages JavaScript.</li>
 *   <li>Injecting Java objects into the WebView using the
 *       {@link android.webkit.WebView#addJavascriptInterface} method. This
 *       method allows you to inject Java objects into a page's JavaScript
 *       context, so that they can be accessed by JavaScript in the page.</li>
 * </ul>
 *
 * <p>Here's a more complicated example, showing error handling,
@@ -4002,34 +4002,39 @@ public class WebView extends AbsoluteLayout
    }

    /**
     * Use this function to bind an object to JavaScript so that the
     * methods can be accessed from JavaScript.
     * This method injects the supplied Java object into the WebView. The
     * object is injected into the JavaScript context of the main frame, using
     * the supplied name. This allows the Java object to be accessed from
     * JavaScript. Note that that injected objects will not appear in
     * JavaScript until the page is next (re)loaded. For example:
     * <pre> webView.addJavascriptInterface(new Object(), "injectedObject");
     * webView.loadData("<!DOCTYPE html><title></title>", "text/html", null);
     * webView.loadUrl("javascript:alert(injectedObject.toString())");</pre>
     * <p><strong>IMPORTANT:</strong>
     * <ul>
     * <li> Using addJavascriptInterface() allows JavaScript to control your
     * application. This can be a very useful feature or a dangerous security
     * issue. When the HTML in the WebView is untrustworthy (for example, part
     * or all of the HTML is provided by some person or process), then an
     * attacker could inject HTML that will execute your code and possibly any
     * code of the attacker's choosing.<br>
     * Do not use addJavascriptInterface() unless all of the HTML in this
     * WebView was written by you.</li>
     * <li> The Java object that is bound runs in another thread and not in
     * the thread that it was constructed in.</li>
     * <li> addJavascriptInterface() can be used to allow JavaScript to control
     * the host application. This is a powerful feature, but also presents a
     * security risk. Use of this method in a WebView containing untrusted
     * content could allow an attacker to manipulate the host application in
     * unintended ways, executing Java code with the permissions of the host
     * application. Use extreme care when using this method in a WebView which
     * could contain untrusted content.
     * <li> JavaScript interacts with Java object on a private, background
     * thread of the WebView. Care is therefore required to maintain thread
     * safety.</li>
     * </ul></p>
     * @param obj The class instance to bind to JavaScript, null instances are
     *            ignored.
     * @param interfaceName The name to used to expose the instance in
     *                      JavaScript.
     * @param object The Java object to inject into the WebView's JavaScript
     *               context. Null values are ignored.
     * @param name The name used to expose the instance in JavaScript.
     */
    public void addJavascriptInterface(Object obj, String interfaceName) {
    public void addJavascriptInterface(Object object, String name) {
        checkThread();
        if (obj == null) {
        if (object == null) {
            return;
        }
        WebViewCore.JSInterfaceData arg = new WebViewCore.JSInterfaceData();
        arg.mObject = obj;
        arg.mInterfaceName = interfaceName;
        arg.mObject = object;
        arg.mInterfaceName = name;
        mWebViewCore.sendMessage(EventHub.ADD_JS_INTERFACE, arg);
    }