diff options
| author | Leon Scroggins <scroggo@google.com> | 2009-12-04 14:54:57 -0500 |
|---|---|---|
| committer | Leon Scroggins <scroggo@google.com> | 2009-12-07 10:21:48 -0500 |
| commit | dcbb033aafed2abc472f0d88520869a6b1f1945b (patch) | |
| tree | 41e7c1004df4666a62ea5ea7d2b1d89547b19440 /WebKit/android/nav | |
| parent | 462daf4b80f6d97c9d1f2b446c7fd61a35c49a59 (diff) | |
| download | external_webkit-dcbb033aafed2abc472f0d88520869a6b1f1945b.zip external_webkit-dcbb033aafed2abc472f0d88520869a6b1f1945b.tar.gz external_webkit-dcbb033aafed2abc472f0d88520869a6b1f1945b.tar.bz2 | |
Store InputType information for <input> fields, return SEARCH action for SEARCH <input>
Fixes http://b/issue?id=2299660 and http://b/issue?id=2299650
Also remove isPassword, which is redundant.
Diffstat (limited to 'WebKit/android/nav')
| -rw-r--r-- | WebKit/android/nav/CacheBuilder.cpp | 10 | ||||
| -rw-r--r-- | WebKit/android/nav/CachedInput.h | 7 | ||||
| -rw-r--r-- | WebKit/android/nav/CachedRoot.cpp | 6 | ||||
| -rw-r--r-- | WebKit/android/nav/CachedRoot.h | 3 | ||||
| -rw-r--r-- | WebKit/android/nav/WebView.cpp | 3 |
5 files changed, 21 insertions, 8 deletions
diff --git a/WebKit/android/nav/CacheBuilder.cpp b/WebKit/android/nav/CacheBuilder.cpp index c9adb53..620e059 100644 --- a/WebKit/android/nav/CacheBuilder.cpp +++ b/WebKit/android/nav/CacheBuilder.cpp @@ -1097,26 +1097,30 @@ void CacheBuilder::BuildFrame(Frame* root, Frame* frame, } if (node->hasTagName(WebCore::HTMLNames::inputTag)) { HTMLInputElement* input = (HTMLInputElement*) node; + HTMLInputElement::InputType inputType = input->inputType(); if (input->isTextField()) { type = TEXT_INPUT_CACHEDNODETYPE; cachedInput.init(); cachedInput.setIsTextField(true); cachedInput.setIsReadOnly(input->readOnly()); exported = input->value().threadsafeCopy(); - cachedInput.setIsPassword(input->inputType() == - HTMLInputElement::PASSWORD); cachedInput.setMaxLength(input->maxLength()); + cachedInput.setInputType(inputType); // If this does not need to be threadsafe, we can use crossThreadString(). // See http://trac.webkit.org/changeset/49160. cachedInput.setName(input->name().string().threadsafeCopy()); // can't detect if this is drawn on top (example: deviant.com login parts) isUnclipped = isTransparent; - } + } else if (inputType == HTMLInputElement::HIDDEN) + continue; } else if (node->hasTagName(HTMLNames::textareaTag)) { cachedInput.init(); type = TEXT_INPUT_CACHEDNODETYPE; HTMLTextAreaElement* area = static_cast<HTMLTextAreaElement*>(node); cachedInput.setIsReadOnly(area->readOnly()); + // Although technically it is not an HTMLInputElement, and therefore + // has no InputType, this one is the most appropriate. + cachedInput.setInputType(HTMLInputElement::TEXT); exported = area->value().threadsafeCopy(); } else if (node->hasTagName(HTMLNames::aTag)) { const HTMLAnchorElement* anchorNode = diff --git a/WebKit/android/nav/CachedInput.h b/WebKit/android/nav/CachedInput.h index 3b00b52..f4f0e95 100644 --- a/WebKit/android/nav/CachedInput.h +++ b/WebKit/android/nav/CachedInput.h @@ -27,6 +27,7 @@ #define CachedInput_H #include "CachedDebug.h" +#include "HTMLInputElement.h" #include "PlatformString.h" namespace android { @@ -41,13 +42,13 @@ public: bzero(this, sizeof(CachedInput)); mName = WebCore::String(); } - bool isPassword() const { return mIsPassword; } + WebCore::HTMLInputElement::InputType inputType() const { return mInputType; } bool isReadOnly() const { return mIsReadOnly; } bool isRtlText() const { return mIsRtlText; } bool isTextField() const { return mIsTextField; } int maxLength() const { return mMaxLength; }; const WebCore::String& name() const { return mName; } - void setIsPassword(bool isPassword) { mIsPassword = isPassword; } + void setInputType(WebCore::HTMLInputElement::InputType type) { mInputType = type; } void setIsReadOnly(bool isReadOnly) { mIsReadOnly = isReadOnly; } void setIsRtlText(bool isRtlText) { mIsRtlText = isRtlText; } void setIsTextField(bool isTextField) { mIsTextField = isTextField; } @@ -59,7 +60,7 @@ private: WebCore::String mName; int mMaxLength; int mTextSize; - bool mIsPassword : 1; + WebCore::HTMLInputElement::InputType mInputType; bool mIsReadOnly : 1; bool mIsRtlText : 1; bool mIsTextField : 1; diff --git a/WebKit/android/nav/CachedRoot.cpp b/WebKit/android/nav/CachedRoot.cpp index 83e2ab6..77fb5b8 100644 --- a/WebKit/android/nav/CachedRoot.cpp +++ b/WebKit/android/nav/CachedRoot.cpp @@ -26,7 +26,9 @@ #include "CachedPrefix.h" #include "android_graphics.h" #include "CachedHistory.h" +#include "CachedInput.h" #include "CachedNode.h" +#include "HTMLInputElement.h" #include "SkBitmap.h" #include "SkBounder.h" #include "SkCanvas.h" @@ -764,6 +766,10 @@ 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 435937a..f93927c 100644 --- a/WebKit/android/nav/CachedRoot.h +++ b/WebKit/android/nav/CachedRoot.h @@ -44,7 +44,8 @@ public: FAILURE = -1, NEXT = 0, GO = 1, - DONE = 2 + DONE = 2, + SEARCH = 3 }; bool adjustForScroll(BestData* , Direction , WebCore::IntPoint* scrollPtr, bool findClosest); diff --git a/WebKit/android/nav/WebView.cpp b/WebKit/android/nav/WebView.cpp index f47b7f0..d59fdeb 100644 --- a/WebKit/android/nav/WebView.cpp +++ b/WebKit/android/nav/WebView.cpp @@ -36,6 +36,7 @@ #include "FindCanvas.h" #include "Frame.h" #include "GraphicsJNI.h" +#include "HTMLInputElement.h" #include "IntPoint.h" #include "IntRect.h" #include "Node.h" @@ -1613,7 +1614,7 @@ static jint nativeFocusCandidateFramePointer(JNIEnv *env, jobject obj) static bool nativeFocusCandidateIsPassword(JNIEnv *env, jobject obj) { const CachedInput* input = getInputCandidate(env, obj); - return input ? input->isPassword() : false; + return input && input->inputType() == WebCore::HTMLInputElement::PASSWORD; } static bool nativeFocusCandidateIsRtlText(JNIEnv *env, jobject obj) |
