diff options
author | Leon Scroggins <scroggo@google.com> | 2009-12-07 13:42:46 -0500 |
---|---|---|
committer | Leon Scroggins <scroggo@google.com> | 2009-12-07 16:36:40 -0500 |
commit | 74757b62fce144f27c25cc7744df82cd7411b2dc (patch) | |
tree | 1ab52350cf6e2952e680a464bef5723cf0078a77 /WebKit/android | |
parent | 2eddb240f196ef15ba9940c3e291bbb6318f1200 (diff) | |
download | external_webkit-74757b62fce144f27c25cc7744df82cd7411b2dc.zip external_webkit-74757b62fce144f27c25cc7744df82cd7411b2dc.tar.gz external_webkit-74757b62fce144f27c25cc7744df82cd7411b2dc.tar.bz2 |
Provide <input> type information to Java side.
Help to fix http://b/issue?id=1890360 and http://b/issue?id=2150538
CacheBuilder.cpp:
Explicitly set isTextField to false for textareas.
CachedRoot:
Remove the code which checks to see if the textfield is a search,
since if it is, we can avoid this path altogether.
WebView:
Return a single integer which tells what type the current text
input field is.
Requires a change to frameworks/base.
Diffstat (limited to 'WebKit/android')
-rw-r--r-- | WebKit/android/nav/CacheBuilder.cpp | 1 | ||||
-rw-r--r-- | WebKit/android/nav/CachedRoot.cpp | 5 | ||||
-rw-r--r-- | WebKit/android/nav/CachedRoot.h | 3 | ||||
-rw-r--r-- | WebKit/android/nav/WebView.cpp | 45 |
4 files changed, 39 insertions, 15 deletions
diff --git a/WebKit/android/nav/CacheBuilder.cpp b/WebKit/android/nav/CacheBuilder.cpp index 620e059..219e4c6 100644 --- a/WebKit/android/nav/CacheBuilder.cpp +++ b/WebKit/android/nav/CacheBuilder.cpp @@ -1121,6 +1121,7 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame, // Although technically it is not an HTMLInputElement, and therefore // has no InputType, this one is the most appropriate. cachedInput.setInputType(HTMLInputElement::TEXT); + cachedInput.setIsTextField(false); exported = area->value().threadsafeCopy(); } else if (node->hasTagName(HTMLNames::aTag)) { const HTMLAnchorElement* anchorNode = diff --git a/WebKit/android/nav/CachedRoot.cpp b/WebKit/android/nav/CachedRoot.cpp index 77fb5b8..0011f06 100644 --- a/WebKit/android/nav/CachedRoot.cpp +++ b/WebKit/android/nav/CachedRoot.cpp @@ -28,7 +28,6 @@ #include "CachedHistory.h" #include "CachedInput.h" #include "CachedNode.h" -#include "HTMLInputElement.h" #include "SkBitmap.h" #include "SkBounder.h" #include "SkCanvas.h" @@ -766,10 +765,6 @@ CachedRoot::ImeAction CachedRoot::cursorTextFieldAction() const // the cursor return FAILURE; } - const CachedInput* textInput = cursorFrame->textInput(cursor); - if (!textInput) return FAILURE; - if (textInput->inputType() == WebCore::HTMLInputElement::SEARCH) - return SEARCH; const CachedNode* firstTextfield = nextTextField(0, 0, false); if (!firstTextfield) { // Error case. There are no textfields in this tree. diff --git a/WebKit/android/nav/CachedRoot.h b/WebKit/android/nav/CachedRoot.h index f93927c..435937a 100644 --- a/WebKit/android/nav/CachedRoot.h +++ b/WebKit/android/nav/CachedRoot.h @@ -44,8 +44,7 @@ public: FAILURE = -1, NEXT = 0, GO = 1, - DONE = 2, - SEARCH = 3 + DONE = 2 }; bool adjustForScroll(BestData* , Direction , WebCore::IntPoint* scrollPtr, bool findClosest); diff --git a/WebKit/android/nav/WebView.cpp b/WebKit/android/nav/WebView.cpp index af9227d..938d93c 100644 --- a/WebKit/android/nav/WebView.cpp +++ b/WebKit/android/nav/WebView.cpp @@ -1623,12 +1623,6 @@ static bool nativeFocusCandidateIsRtlText(JNIEnv *env, jobject obj) return input ? input->isRtlText() : false; } -static bool nativeFocusCandidateIsTextField(JNIEnv *env, jobject obj) -{ - const CachedInput* input = getInputCandidate(env, obj); - return input ? input->isTextField() : false; -} - static bool nativeFocusCandidateIsTextInput(JNIEnv *env, jobject obj) { const CachedNode* node = getFocusCandidate(env, obj); @@ -1684,6 +1678,41 @@ static jint nativeFocusCandidateTextSize(JNIEnv *env, jobject obj) return input ? input->textSize() : 0; } +enum type { + NONE = -1, + NORMAL_TEXT_FIELD = 0, + TEXT_AREA = 1, + PASSWORD = 2, + SEARCH = 3, + EMAIL = 4, + NUMBER = 5, + TELEPHONE = 6, + URL = 7 +}; + +static int nativeFocusCandidateType(JNIEnv *env, jobject obj) +{ + const CachedInput* input = getInputCandidate(env, obj); + if (!input) return NONE; + if (!input->isTextField()) return TEXT_AREA; + switch (input->inputType()) { + case HTMLInputElement::PASSWORD: + return PASSWORD; + case HTMLInputElement::SEARCH: + return SEARCH; + case HTMLInputElement::EMAIL: + return EMAIL; + case HTMLInputElement::NUMBER: + return NUMBER; + case HTMLInputElement::TELEPHONE: + return TELEPHONE; + case HTMLInputElement::URL: + return URL; + default: + return NORMAL_TEXT_FIELD; + } +} + static bool nativeFocusCandidateIsPlugin(JNIEnv *env, jobject obj) { const CachedNode* node = getFocusCandidate(env, obj); @@ -2058,8 +2087,6 @@ static JNINativeMethod gJavaWebViewMethods[] = { (void*) nativeFocusCandidateIsPlugin }, { "nativeFocusCandidateIsRtlText", "()Z", (void*) nativeFocusCandidateIsRtlText }, - { "nativeFocusCandidateIsTextField", "()Z", - (void*) nativeFocusCandidateIsTextField }, { "nativeFocusCandidateIsTextInput", "()Z", (void*) nativeFocusCandidateIsTextInput }, { "nativeFocusCandidateMaxLength", "()I", @@ -2074,6 +2101,8 @@ static JNINativeMethod gJavaWebViewMethods[] = { (void*) nativeFocusCandidateText }, { "nativeFocusCandidateTextSize", "()I", (void*) nativeFocusCandidateTextSize }, + { "nativeFocusCandidateType", "()I", + (void*) nativeFocusCandidateType }, { "nativeFocusIsPlugin", "()Z", (void*) nativeFocusIsPlugin }, { "nativeFocusNodePointer", "()I", |