Title: [97689] branches/chromium/874
Revision
97689
Author
[email protected]
Date
2011-10-17 18:12:46 -0700 (Mon, 17 Oct 2011)

Log Message

Merge 97351 - REGRESSION(r89915): <input type=email multiple> don't show the default value
https://bugs.webkit.org/show_bug.cgi?id=69895

Reviewed by Hajime Morita.

Source/WebCore:

m_valueIfDirty became unexpectedly empty because
EmailInputType::sanitizeValue() returned an empty string for a
null input string.

To solve this issue, HTMLInputElement::sanitizeValue() checks
nullness, and remove the null check of sanitizeValue() of
InputType subclasses.
Also, we make InputType::sanitizeValue() const.

* html/ColorInputType.cpp:
(WebCore::ColorInputType::sanitizeValue):
- Make this const.
- Remove null check.
* html/ColorInputType.h: Make sanitizeValue() const.
* html/EmailInputType.cpp:
(WebCore::EmailInputType::sanitizeValue): Make this const.
* html/EmailInputType.h: Make sanitizeValue() const.
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::sanitizeValue):
(WebCore::HTMLInputElement::updateValueIfNeeded):
* html/InputType.cpp:
(WebCore::InputType::sanitizeValue):
Returns a null string if the input string is null, and
don't call InputType::sanitizeValue() in this case.
* html/InputType.h: Make sanitizeValue() const.
* html/NumberInputType.cpp:
(WebCore::NumberInputType::sanitizeValue): Make this const.
* html/NumberInputType.h: Make sanitizeValue() const.
* html/RangeInputType.cpp:
(WebCore::RangeInputType::sanitizeValue):
- Make this const.
- Remove null check.
* html/RangeInputType.h: Make sanitizeValue() const.
* html/TextFieldInputType.cpp:
(WebCore::TextFieldInputType::sanitizeValue): Make this const.
* html/TextFieldInputType.h: Make sanitizeValue() const.

LayoutTests:

* fast/forms/input-value-sanitization-expected.txt:
* fast/forms/input-value-sanitization.html:

[email protected]
BUG=http://code.google.com/p/chromium/issues/detail?id=99829
Review URL: http://codereview.chromium.org/8336009

Modified Paths

Diff

Modified: branches/chromium/874/LayoutTests/fast/forms/input-value-sanitization-expected.txt (97688 => 97689)


--- branches/chromium/874/LayoutTests/fast/forms/input-value-sanitization-expected.txt	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/LayoutTests/fast/forms/input-value-sanitization-expected.txt	2011-10-18 01:12:46 UTC (rev 97689)
@@ -1,6 +1,11 @@
 Tests for value sanitization algorithm.
 
 
+Email with multiple:
+PASS input.value is "[email protected],tkent@example.!!!"
+Email without multiple:
+PASS input.value is " [email protected], tkent@example.***  "
+
 Number:
 PASS input.value is "65536"
 PASS input.value = "256"; input.value is "256"

Modified: branches/chromium/874/LayoutTests/fast/forms/input-value-sanitization.html (97688 => 97689)


--- branches/chromium/874/LayoutTests/fast/forms/input-value-sanitization.html	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/LayoutTests/fast/forms/input-value-sanitization.html	2011-10-18 01:12:46 UTC (rev 97689)
@@ -11,6 +11,20 @@
 var input;
 
 debug('');
+debug('Email with multiple:');
+input = document.createElement('input');
+input.multiple = true;
+input.type = 'email';
+input.setAttribute('value', ' [email protected], tkent@example.!!!  ');
+shouldBe('input.value', '"[email protected],tkent@example.!!!"');
+debug('Email without multiple:');
+input = document.createElement('input');
+input.multiple = false;
+input.type = 'email';
+input.setAttribute('value', ' [email protected], tkent@example.***  \r\n');
+shouldBe('input.value', '" [email protected], tkent@example.***  "');
+
+debug('');
 debug('Number:');
 input = document.createElement('input');
 input.setAttribute('value', '65536');

Modified: branches/chromium/874/Source/WebCore/html/ColorInputType.cpp (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/ColorInputType.cpp	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/ColorInputType.cpp	2011-10-18 01:12:46 UTC (rev 97689)
@@ -89,11 +89,8 @@
     return String("#000000");
 }
 
-String ColorInputType::sanitizeValue(const String& proposedValue)
+String ColorInputType::sanitizeValue(const String& proposedValue) const
 {
-    if (proposedValue.isNull())
-        return proposedValue;
-
     if (!isValidColorString(proposedValue))
         return fallbackValue();
 

Modified: branches/chromium/874/Source/WebCore/html/ColorInputType.h (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/ColorInputType.h	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/ColorInputType.h	2011-10-18 01:12:46 UTC (rev 97689)
@@ -49,7 +49,7 @@
     virtual const AtomicString& formControlType() const;
     virtual bool supportsRequired() const;
     virtual String fallbackValue();
-    virtual String sanitizeValue(const String&);
+    virtual String sanitizeValue(const String&) const;
     virtual Color valueAsColor() const;
     virtual void createShadowSubtree();
     virtual void valueChanged();

Modified: branches/chromium/874/Source/WebCore/html/EmailInputType.cpp (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/EmailInputType.cpp	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/EmailInputType.cpp	2011-10-18 01:12:46 UTC (rev 97689)
@@ -92,7 +92,7 @@
     return true;
 }
 
-String EmailInputType::sanitizeValue(const String& proposedValue)
+String EmailInputType::sanitizeValue(const String& proposedValue) const
 {
     String noLineBreakValue = proposedValue.removeCharacters(isHTMLLineBreak);
     if (!element()->multiple())

Modified: branches/chromium/874/Source/WebCore/html/EmailInputType.h (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/EmailInputType.h	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/EmailInputType.h	2011-10-18 01:12:46 UTC (rev 97689)
@@ -46,7 +46,7 @@
     virtual bool typeMismatch() const;
     virtual String typeMismatchText() const;
     virtual bool isEmailField() const;
-    virtual String sanitizeValue(const String&);
+    virtual String sanitizeValue(const String&) const;
 };
 
 } // namespace WebCore

Modified: branches/chromium/874/Source/WebCore/html/HTMLInputElement.cpp (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/HTMLInputElement.cpp	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/HTMLInputElement.cpp	2011-10-18 01:12:46 UTC (rev 97689)
@@ -1414,6 +1414,8 @@
 
 String HTMLInputElement::sanitizeValue(const String& proposedValue) const
 {
+    if (proposedValue.isNull())
+        return proposedValue;
     return m_inputType->sanitizeValue(proposedValue);
 }
 
@@ -1955,6 +1957,7 @@
 void HTMLInputElement::updateValueIfNeeded()
 {
     String newValue = sanitizeValue(m_valueIfDirty);
+    ASSERT(!m_valueIfDirty.isNull() || newValue.isNull());
     if (newValue != m_valueIfDirty)
         setValue(newValue);
 }

Modified: branches/chromium/874/Source/WebCore/html/InputType.cpp (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/InputType.cpp	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/InputType.cpp	2011-10-18 01:12:46 UTC (rev 97689)
@@ -554,7 +554,7 @@
     return true;
 }
 
-String InputType::sanitizeValue(const String& proposedValue)
+String InputType::sanitizeValue(const String& proposedValue) const
 {
     return proposedValue;
 }

Modified: branches/chromium/874/Source/WebCore/html/InputType.h (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/InputType.h	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/InputType.h	2011-10-18 01:12:46 UTC (rev 97689)
@@ -161,7 +161,8 @@
     virtual String convertFromVisibleValue(const String&) const;
     virtual bool isAcceptableValue(const String&);
     // Returing the null string means "use the default value."
-    virtual String sanitizeValue(const String&);
+    // This function must be called only by HTMLInputElement::sanitizeValue().
+    virtual String sanitizeValue(const String&) const;
     virtual bool hasUnacceptableValue();
 
     // Event handlers

Modified: branches/chromium/874/Source/WebCore/html/NumberInputType.cpp (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/NumberInputType.cpp	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/NumberInputType.cpp	2011-10-18 01:12:46 UTC (rev 97689)
@@ -308,7 +308,7 @@
     return proposedValue.isEmpty() || isfinite(parseLocalizedNumber(proposedValue)) || parseToDoubleForNumberType(proposedValue, 0);
 }
 
-String NumberInputType::sanitizeValue(const String& proposedValue)
+String NumberInputType::sanitizeValue(const String& proposedValue) const
 {
     if (proposedValue.isEmpty())
         return proposedValue;

Modified: branches/chromium/874/Source/WebCore/html/NumberInputType.h (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/NumberInputType.h	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/NumberInputType.h	2011-10-18 01:12:46 UTC (rev 97689)
@@ -68,7 +68,7 @@
     virtual String visibleValue() const;
     virtual String convertFromVisibleValue(const String&) const;
     virtual bool isAcceptableValue(const String&);
-    virtual String sanitizeValue(const String&);
+    virtual String sanitizeValue(const String&) const;
     virtual bool hasUnacceptableValue();
     virtual bool shouldRespectSpeechAttribute();
     virtual bool supportsPlaceholder() const;

Modified: branches/chromium/874/Source/WebCore/html/RangeInputType.cpp (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/RangeInputType.cpp	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/RangeInputType.cpp	2011-10-18 01:12:46 UTC (rev 97689)
@@ -294,14 +294,8 @@
     return serializeForNumberType(StepRange(element()).defaultValue());
 }
 
-String RangeInputType::sanitizeValue(const String& proposedValue)
+String RangeInputType::sanitizeValue(const String& proposedValue) const
 {
-    // If the proposedValue is null than this is a reset scenario and we
-    // want the range input's value attribute to take priority over the
-    // calculated default (middle) value.
-    if (proposedValue.isNull())
-        return proposedValue;
-
     return serializeForNumberType(StepRange(element()).clampValue(proposedValue));
 }
 

Modified: branches/chromium/874/Source/WebCore/html/RangeInputType.h (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/RangeInputType.h	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/RangeInputType.h	2011-10-18 01:12:46 UTC (rev 97689)
@@ -68,7 +68,7 @@
     virtual void minOrMaxAttributeChanged();
     virtual void valueChanged();
     virtual String fallbackValue();
-    virtual String sanitizeValue(const String& proposedValue);
+    virtual String sanitizeValue(const String& proposedValue) const;
     virtual bool shouldRespectListAttribute();
 };
 

Modified: branches/chromium/874/Source/WebCore/html/TextFieldInputType.cpp (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/TextFieldInputType.cpp	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/TextFieldInputType.cpp	2011-10-18 01:12:46 UTC (rev 97689)
@@ -273,7 +273,7 @@
     return string.left(newLength);
 }
 
-String TextFieldInputType::sanitizeValue(const String& proposedValue)
+String TextFieldInputType::sanitizeValue(const String& proposedValue) const
 {
 #if ENABLE(WCSS)
     if (!element()->isConformToInputMask(proposedValue)) {

Modified: branches/chromium/874/Source/WebCore/html/TextFieldInputType.h (97688 => 97689)


--- branches/chromium/874/Source/WebCore/html/TextFieldInputType.h	2011-10-18 01:10:08 UTC (rev 97688)
+++ branches/chromium/874/Source/WebCore/html/TextFieldInputType.h	2011-10-18 01:12:46 UTC (rev 97689)
@@ -71,7 +71,7 @@
     virtual bool shouldSubmitImplicitly(Event*);
     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const;
     virtual bool shouldUseInputMethod() const;
-    virtual String sanitizeValue(const String&);
+    virtual String sanitizeValue(const String&) const;
     virtual bool shouldRespectListAttribute();
     virtual HTMLElement* placeholderElement() const;
     virtual void updatePlaceholderText();
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to