Index: Source/core/html/HTMLTextFormControlElement.cpp |
diff --git a/Source/core/html/HTMLTextFormControlElement.cpp b/Source/core/html/HTMLTextFormControlElement.cpp |
index 03a8854b8cd7236ac39ebfb69cce901d3445bfda..546940101095dedbe77181bf7f18ebcc50264337 100644 |
--- a/Source/core/html/HTMLTextFormControlElement.cpp |
+++ b/Source/core/html/HTMLTextFormControlElement.cpp |
@@ -63,6 +63,7 @@ HTMLTextFormControlElement::HTMLTextFormControlElement(const QualifiedName& tagN |
, m_cachedSelectionStart(0) |
, m_cachedSelectionEnd(0) |
, m_cachedSelectionDirection(SelectionHasNoDirection) |
+ , m_autocapitalize(TextFieldAutocapitalize::Uninitialized) |
{ |
} |
@@ -548,6 +549,47 @@ PassRefPtrWillBeRawPtr<Range> HTMLTextFormControlElement::selection() const |
return Range::create(document(), startNode, start, endNode, end); |
} |
+static const AtomicString& autocapitalizeString(TextFieldAutocapitalize autocapitalize) |
+{ |
+ DEFINE_STATIC_LOCAL(const AtomicString, none, ("none", AtomicString::ConstructFromLiteral)); |
+ DEFINE_STATIC_LOCAL(const AtomicString, characters, ("characters", AtomicString::ConstructFromLiteral)); |
+ DEFINE_STATIC_LOCAL(const AtomicString, words, ("words", AtomicString::ConstructFromLiteral)); |
+ DEFINE_STATIC_LOCAL(const AtomicString, sentences, ("sentences", AtomicString::ConstructFromLiteral)); |
+ |
+ switch (autocapitalize) { |
+ case TextFieldAutocapitalize::Uninitialized: |
+ ASSERT_NOT_REACHED(); |
+ case TextFieldAutocapitalize::None: |
+ return none; |
+ case TextFieldAutocapitalize::Characters: |
+ return characters; |
+ case TextFieldAutocapitalize::Words: |
+ return words; |
+ case TextFieldAutocapitalize::Sentences: |
+ return sentences; |
+ } |
+ |
+ ASSERT_NOT_REACHED(); |
+ return none; |
+} |
+ |
+TextFieldAutocapitalize HTMLTextFormControlElement::autocapitalizeValue() const |
+{ |
+ if (m_autocapitalize == TextFieldAutocapitalize::Uninitialized) |
+ return defaultAutocapitalizeValue(); |
+ return m_autocapitalize; |
+} |
+ |
+const AtomicString& HTMLTextFormControlElement::autocapitalize() const |
+{ |
+ return autocapitalizeString(autocapitalizeValue()); |
+} |
+ |
+void HTMLTextFormControlElement::setAutocapitalize(const AtomicString& autocapitalize) |
+{ |
+ setAttribute(autocapitalizeAttr, autocapitalize); |
+} |
+ |
void HTMLTextFormControlElement::restoreCachedSelection() |
{ |
setSelectionRange(m_cachedSelectionStart, m_cachedSelectionEnd, m_cachedSelectionDirection, NotDispatchSelectEvent); |
@@ -579,6 +621,17 @@ void HTMLTextFormControlElement::parseAttribute(const QualifiedName& name, const |
if (name == placeholderAttr) { |
updatePlaceholderVisibility(true); |
UseCounter::count(document(), UseCounter::PlaceholderAttribute); |
+ } else if (name == autocapitalizeAttr) { |
+ if (equalIgnoringCase(value, "off") || equalIgnoringCase(value, "none")) |
+ m_autocapitalize = TextFieldAutocapitalize::None; |
+ else if (equalIgnoringCase(value, "characters")) |
+ m_autocapitalize = TextFieldAutocapitalize::Characters; |
+ else if (equalIgnoringCase(value, "words")) |
+ m_autocapitalize = TextFieldAutocapitalize::Words; |
+ else if (equalIgnoringCase(value, "sentences")) |
+ m_autocapitalize = TextFieldAutocapitalize::Sentences; |
+ else |
+ m_autocapitalize = TextFieldAutocapitalize::Uninitialized; |
} else |
HTMLFormControlElementWithState::parseAttribute(name, value); |
} |