WebCore:
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Sep 2007 15:38:58 +0000 (15:38 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Sep 2007 15:38:58 +0000 (15:38 +0000)
        Reviewed by Mitz and Kevin Decker.

        - fix http://bugs.webkit.org/show_bug.cgi?id=15197
          <rdar://problem/5478271> REGRESSION: Some Yahoo text entry fields
          render as lines rather than text entry boxes

        Test: fast/forms/textarea-rows-cols.html

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement): Use constants for the default number
        of rows and columns.
        (WebCore::HTMLTextAreaElement::parseMappedAttribute): If rows/cols attribute has a value
        that's missing, non-numeric, or zero, then use the default value. Also check for the
        case where the effective value of the attribute isn't changing.

LayoutTests:

        Reviewed by Mitz and Kevin Decker.

        - test for http://bugs.webkit.org/show_bug.cgi?id=15197
          <rdar://problem/5478271> REGRESSION: Some Yahoo text entry fields
          render as lines rather than text entry boxes

        * fast/forms/textarea-rows-cols.html: Added.
        * platform/mac/fast/forms/textarea-rows-cols-expected.checksum: Added.
        * platform/mac/fast/forms/textarea-rows-cols-expected.png: Added.
        * platform/mac/fast/forms/textarea-rows-cols-expected.txt: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@25562 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/forms/textarea-rows-cols.html [new file with mode: 0644]
LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.txt [new file with mode: 0644]
WebCore/ChangeLog
WebCore/html/HTMLTextAreaElement.cpp

index 2cae45f..f3b880a 100644 (file)
@@ -1,3 +1,16 @@
+2007-09-14  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz and Kevin Decker.
+
+        - test for http://bugs.webkit.org/show_bug.cgi?id=15197
+          <rdar://problem/5478271> REGRESSION: Some Yahoo text entry fields
+          render as lines rather than text entry boxes
+
+        * fast/forms/textarea-rows-cols.html: Added.
+        * platform/mac/fast/forms/textarea-rows-cols-expected.checksum: Added.
+        * platform/mac/fast/forms/textarea-rows-cols-expected.png: Added.
+        * platform/mac/fast/forms/textarea-rows-cols-expected.txt: Added.
+
 2007-09-13  Darin Adler  <darin@apple.com>
 
         Reviewed by Oliver.
diff --git a/LayoutTests/fast/forms/textarea-rows-cols.html b/LayoutTests/fast/forms/textarea-rows-cols.html
new file mode 100644 (file)
index 0000000..585de3e
--- /dev/null
@@ -0,0 +1,25 @@
+<div>Test for edge cases of &lt;textarea&gt; rows and cols attributes.</div>
+
+<hr>
+
+<div><textarea>default height</textarea></div>
+<div><textarea rows="1">rows = 1</textarea></div>
+<div><textarea rows="2">rows = 2; should match default height</textarea></div>
+<div><textarea rows="3">rows = 3</textarea></div>
+<div><textarea rows>rows; should be default height</textarea></div>
+<div><textarea rows="0">rows = 0; should be default height</textarea></div>
+<div><textarea rows="-1">rows = -1; should be default height</textarea></div>
+<div><textarea rows="x">rows = x; should be default height</textarea></div>
+
+<hr>
+
+<div><textarea>default width</textarea></div>
+<div><textarea cols="1">cols = 1</textarea></div>
+<div><textarea cols="20">cols = 20; should match default width</textarea></div>
+<div><textarea cols="40">cols = 40</textarea></div>
+<div><textarea cols>cols; should be default width</textarea></div>
+<div><textarea cols="0">cols = 0; should be default width</textarea></div>
+<div><textarea cols="-1">cols = -1; should be default width</textarea></div>
+<div><textarea cols="x">cols = x; should be default width</textarea></div>
+
+<hr>
diff --git a/LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.checksum b/LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.checksum
new file mode 100644 (file)
index 0000000..c002075
--- /dev/null
@@ -0,0 +1 @@
+fc42b979f12722f103e90381fe8aed54
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.png b/LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.png
new file mode 100644 (file)
index 0000000..92bf12c
Binary files /dev/null and b/LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.png differ
diff --git a/LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.txt b/LayoutTests/platform/mac/fast/forms/textarea-rows-cols-expected.txt
new file mode 100644 (file)
index 0000000..f62b2bc
--- /dev/null
@@ -0,0 +1,119 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock {DIV} at (0,0) size 784x18
+        RenderText {#text} at (0,0) size 364x18
+          text run at (0,0) width 364: "Test for edge cases of <textarea> rows and cols attributes."
+      RenderBlock {HR} at (0,26) size 784x2 [border: (1px inset #000000)]
+      RenderBlock {DIV} at (0,36) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,68) size 784x19
+        RenderTextControl {TEXTAREA} at (2,2) size 163x15 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,87) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,119) size 784x45
+        RenderTextControl {TEXTAREA} at (2,2) size 163x41 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,164) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,196) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,228) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,260) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {HR} at (0,300) size 784x2 [border: (1px inset #000000)]
+      RenderBlock {DIV} at (0,310) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,342) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 30x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,374) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,406) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 302x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,438) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,470) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,502) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {DIV} at (0,534) size 784x32
+        RenderTextControl {TEXTAREA} at (2,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+      RenderBlock {HR} at (0,574) size 784x2 [border: (1px inset #000000)]
+layer at (11,47) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 75x13
+      text run at (3,0) width 75: "default height"
+layer at (11,79) size 161x13
+  RenderBlock {DIV} at (1,1) size 161x13
+    RenderText {#text} at (3,0) size 48x13
+      text run at (3,0) width 48: "rows = 1"
+layer at (11,98) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 131x26
+      text run at (3,0) width 131: "rows = 2; should match "
+      text run at (3,13) width 75: "default height"
+layer at (11,130) size 161x39
+  RenderBlock {DIV} at (1,1) size 161x39
+    RenderText {#text} at (3,0) size 48x13
+      text run at (3,0) width 48: "rows = 3"
+layer at (11,175) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 130x26
+      text run at (3,0) width 130: "rows; should be default "
+      text run at (3,13) width 34: "height"
+layer at (11,207) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 153x26
+      text run at (3,0) width 153: "rows = 0; should be default "
+      text run at (3,13) width 34: "height"
+layer at (11,239) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 119x26
+      text run at (3,0) width 119: "rows = -1; should be "
+      text run at (3,13) width 75: "default height"
+layer at (11,271) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 153x26
+      text run at (3,0) width 153: "rows = x; should be default "
+      text run at (3,13) width 34: "height"
+layer at (11,321) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 71x13
+      text run at (3,0) width 71: "default width"
+layer at (11,353) size 28x26
+  RenderBlock {DIV} at (1,1) size 28x26
+    RenderText {#text} at (3,0) size 22x26
+      text run at (3,0) width 22: "cols "
+      text run at (3,13) width 19: "= 1"
+layer at (11,385) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 134x26
+      text run at (3,0) width 134: "cols = 20; should match "
+      text run at (3,13) width 71: "default width"
+layer at (11,417) size 300x26
+  RenderBlock {DIV} at (1,1) size 300x26
+    RenderText {#text} at (3,0) size 51x13
+      text run at (3,0) width 51: "cols = 40"
+layer at (11,449) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 126x26
+      text run at (3,0) width 126: "cols; should be default "
+      text run at (3,13) width 30: "width"
+layer at (11,481) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 149x26
+      text run at (3,0) width 149: "cols = 0; should be default "
+      text run at (3,13) width 30: "width"
+layer at (11,513) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 155x26
+      text run at (3,0) width 153: "cols = -1; should be default"
+      text run at (156,0) width 2: " "
+      text run at (3,13) width 30: "width"
+layer at (11,545) size 161x26
+  RenderBlock {DIV} at (1,1) size 161x26
+    RenderText {#text} at (3,0) size 149x26
+      text run at (3,0) width 149: "cols = x; should be default "
+      text run at (3,13) width 30: "width"
index 5f9de2a..5cf9d82 100644 (file)
@@ -1,3 +1,20 @@
+2007-09-14  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz and Kevin Decker.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15197
+          <rdar://problem/5478271> REGRESSION: Some Yahoo text entry fields
+          render as lines rather than text entry boxes
+
+        Test: fast/forms/textarea-rows-cols.html
+
+        * html/HTMLTextAreaElement.cpp:
+        (WebCore::HTMLTextAreaElement::HTMLTextAreaElement): Use constants for the default number
+        of rows and columns.
+        (WebCore::HTMLTextAreaElement::parseMappedAttribute): If rows/cols attribute has a value
+        that's missing, non-numeric, or zero, then use the default value. Also check for the
+        case where the effective value of the attribute isn't changing.
+
 2007-09-14  Sven Herzberg  <sven@imendio.com>
 
         Reviewed by Adam Roben.
index cf45b13..05ac61b 100644 (file)
@@ -44,10 +44,13 @@ namespace WebCore {
 using namespace EventNames;
 using namespace HTMLNames;
 
-HTMLTextAreaElement::HTMLTextAreaElement(Document *doc, HTMLFormElement *f)
+static const int defaultRows = 2;
+static const int defaultCols = 20;
+
+HTMLTextAreaElement::HTMLTextAreaElement(Document* doc, HTMLFormElement* f)
     : HTMLFormControlElementWithState(textareaTag, doc, f)
-    , m_rows(2)
-    , m_cols(20)
+    , m_rows(defaultRows)
+    , m_cols(defaultCols)
     , m_wrap(ta_Virtual)
     , cachedSelStart(-1)
     , cachedSelEnd(-1)
@@ -124,13 +127,23 @@ void HTMLTextAreaElement::childrenChanged()
 void HTMLTextAreaElement::parseMappedAttribute(MappedAttribute *attr)
 {
     if (attr->name() == rowsAttr) {
-        m_rows = !attr->isNull() ? attr->value().toInt() : 3;
-        if (renderer())
-            renderer()->setNeedsLayoutAndPrefWidthsRecalc();
+        int rows = attr->value().toInt();
+        if (rows <= 0)
+            rows = defaultRows;
+        if (m_rows != rows) {
+            m_rows = rows;
+            if (renderer())
+                renderer()->setNeedsLayoutAndPrefWidthsRecalc();
+        }
     } else if (attr->name() == colsAttr) {
-        m_cols = !attr->isNull() ? attr->value().toInt() : 60;
-        if (renderer())
-            renderer()->setNeedsLayoutAndPrefWidthsRecalc();
+        int cols = attr->value().toInt();
+        if (cols <= 0)
+            cols = defaultCols;
+        if (m_cols != cols) {
+            m_cols = cols;
+            if (renderer())
+                renderer()->setNeedsLayoutAndPrefWidthsRecalc();
+        }
     } else if (attr->name() == wrapAttr) {
         // virtual / physical is Netscape extension of HTML 3.0, now deprecated
         // soft/ hard / off is recommendation for HTML 4 extension by IE and NS 4