Remove the WebTextView if it is drawing when it shouldn't.

Bug 2614064

Change-Id: Id5d0a27e862bb783299f6fa4863221a27318f52c
diff --git a/core/java/android/webkit/WebTextView.java b/core/java/android/webkit/WebTextView.java
index dc952e6..19abec1 100644
--- a/core/java/android/webkit/WebTextView.java
+++ b/core/java/android/webkit/WebTextView.java
@@ -301,6 +301,23 @@
     }
 
     @Override
+    protected void onDraw(Canvas canvas) {
+        // onDraw should only be called for password fields.  If WebTextView is
+        // still drawing, but is no longer corresponding to a password field,
+        // remove it.
+        if (mWebView == null || !mWebView.nativeFocusCandidateIsPassword()
+                || !isSameTextField(mWebView.nativeFocusCandidatePointer())) {
+            // Although calling remove() would seem to make more sense here,
+            // changing it to not be a password field will make it not draw.
+            // Other code will make sure that it is removed completely, but this
+            // way the user will not see it.
+            setInPassword(false);
+        } else {
+            super.onDraw(canvas);
+        }
+    }
+
+    @Override
     public void onEditorAction(int actionCode) {
         switch (actionCode) {
         case EditorInfo.IME_ACTION_NEXT:
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index e2f5de4..66dad0b 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -7256,13 +7256,13 @@
     private native void     nativeFindNext(boolean forward);
     /* package */ native int      nativeFocusCandidateFramePointer();
     /* package */ native boolean  nativeFocusCandidateHasNextTextfield();
-    private native boolean  nativeFocusCandidateIsPassword();
+    /* package */ native boolean  nativeFocusCandidateIsPassword();
     private native boolean  nativeFocusCandidateIsRtlText();
     private native boolean  nativeFocusCandidateIsTextInput();
     /* package */ native int      nativeFocusCandidateMaxLength();
     /* package */ native String   nativeFocusCandidateName();
     private native Rect     nativeFocusCandidateNodeBounds();
-    private native int      nativeFocusCandidatePointer();
+    /* package */ native int      nativeFocusCandidatePointer();
     private native String   nativeFocusCandidateText();
     private native int      nativeFocusCandidateTextSize();
     /**