Changeset 89915 in webkit


Ignore:
Timestamp:
Jun 28, 2011 2:46:08 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-06-28 Kentaro Hara <haraken@google.com>

Reviewed by Kent Tamura.

Allow spaces between e-mail addresses in 'email' input type.
https://bugs.webkit.org/show_bug.cgi?id=55987

Allowed spaces between e-mail addresses in 'email' input type,
e.g. ' a@p.com , b@p.com ' is a valid value. Implemented the
value sanitization algorithm for an e-mail value. Added more unit
tests that check the e-mail value parser.

  • fast/forms/ValidityState-typeMismatch-email-expected.txt:
  • fast/forms/resources/ValidityState-typeMismatch-email.js:

2011-06-28 Kentaro Hara <haraken@google.com>

Reviewed by Kent Tamura.

Allow spaces between e-mail addresses in 'email' input type.
https://bugs.webkit.org/show_bug.cgi?id=55987

Allowed spaces between e-mail addresses in 'email' input type,
e.g. ' a@p.com , b@p.com ' is a valid value. Implemented the
value sanitization algorithm for an e-mail value. Added more unit
tests that check the e-mail value parser.

Test: fast/forms/ValidityState-typeMismatch-email.html

  • html/EmailInputType.cpp: (WebCore::EmailInputType::typeMismatchFor): (WebCore::EmailInputType::sanitizeValue):
  • html/EmailInputType.h:
  • html/parser/HTMLParserIdioms.cpp: (WebCore::stripHTMLLineBreaks):
  • html/parser/HTMLParserIdioms.h: (WebCore::isHTMLLineBreak):
Location:
trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r89914 r89915  
     12011-06-28  Kentaro Hara  <haraken@google.com>
     2
     3        Reviewed by Kent Tamura.
     4
     5        Allow spaces between e-mail addresses in 'email' input type.
     6        https://bugs.webkit.org/show_bug.cgi?id=55987
     7
     8        Allowed spaces between e-mail addresses in 'email' input type,
     9        e.g. ' a@p.com , b@p.com ' is a valid value. Implemented the
     10        value sanitization algorithm for an e-mail value.  Added more unit
     11        tests that check the e-mail value parser.
     12
     13        * fast/forms/ValidityState-typeMismatch-email-expected.txt:
     14        * fast/forms/resources/ValidityState-typeMismatch-email.js:
     15
    1162011-06-28  Csaba Osztrogonác  <ossy@webkit.org>
    217
  • trunk/LayoutTests/fast/forms/ValidityState-typeMismatch-email-expected.txt

    r86298 r89915  
    1 This test aims to check for typeMismatch flag with type=email input fields.
     1This test aims to check for typeMismatch flag and sanitization with type=email input fields.
    22
    33On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
    44
    55
    6 PASS something@something.com is a correct valid email address
    7 PASS someone@localhost.localdomain is a correct valid email address
    8 PASS someone@127.0.0.1 is a correct valid email address
    9 PASS a@b.b is a correct valid email address
    10 PASS a/b@domain.com is a correct valid email address
    11 PASS {}@domain.com is a correct valid email address
    12 PASS ddjk-s-jk@asl-.com is a correct valid email address
    13 PASS m*'!%@something.sa is a correct valid email address
    14 PASS tu!!7n7.ad##0!!!@company.ca is a correct valid email address
    15 PASS %@com.com is a correct valid email address
    16 PASS !#$%&'*+/=?^_`{|}~.-@com.com is a correct valid email address
    17 PASS .wooly@example.com is a correct valid email address
    18 PASS wo..oly@example.com is a correct valid email address
    19 PASS someone@do-ma-in.com is a correct valid email address
    20 PASS someone@do-.com is a correct valid email address
    21 PASS somebody@-.com is a correct valid email address
    22 PASS somebody@example is a correct valid email address
    23 PASS invalid:email@example.com is a correct invalid email address
    24 PASS @somewhere.com is a correct invalid email address
    25 PASS example.com is a correct invalid email address
    26 PASS @@example.com is a correct invalid email address
    27 PASS a space@example.com is a correct invalid email address
    28 PASS something@ex..ample.com is a correct invalid email address
    29 PASS a@c is a correct invalid email address
    30 PASS someone@somewhere.com. is a correct invalid email address
    31 PASS ""testlah""@example.com is a correct invalid email address
    32 PASS "testblah"@example.com is a correct invalid email address
    33 PASS someone@somewhere.com@ is a correct invalid email address
    34 PASS someone@somewhere_com is a correct invalid email address
    35 PASS someone@some:where.com is a correct invalid email address
    36 PASS . is a correct invalid email address
    37 PASS F/s/f/a@feo+re.com is a correct invalid email address
    38 PASS some+long+email+address@some+host-weird-/looking.com is a correct invalid email address
    39 PASS someone@somewhere.com,john@doe.com,a@b.c,a/b@c.c,ualla@ualla.127 is a correct valid email address list
    40 PASS tu!!7n7.ad##0!!!@company.ca,F/s/f/a@feo-re.com,m*'@a.b is a correct valid email address list
    41 PASS ,,,,,,,,,,, is a correct valid email address list
    42 PASS someone@somewhere.com,john@doe..com,a@b,a/b@c,ualla@ualla.127 is a correct invalid email address list
    43 PASS some+long+email+address@some+host:weird-/looking.com,F/s/f/a@feo+re.com,,m*'@'!% is a correct invalid email address list
    44 PASS ,,,,,,,,, ,, is a correct invalid email address list
     6Valid single addresses when 'multiple' attribute is not set.
     7PASS "something@something.com" is a valid email address.
     8PASS "someone@localhost.localdomain" is a valid email address.
     9PASS "someone@127.0.0.1" is a valid email address.
     10PASS "a@b.b" is a valid email address.
     11PASS "a/b@domain.com" is a valid email address.
     12PASS "{}@domain.com" is a valid email address.
     13PASS "ddjk-s-jk@asl-.com" is a valid email address.
     14PASS "m*'!%@something.sa" is a valid email address.
     15PASS "tu!!7n7.ad##0!!!@company.ca" is a valid email address.
     16PASS "%@com.com" is a valid email address.
     17PASS "!#$%&'*+/=?^_`{|}~.-@com.com" is a valid email address.
     18PASS ".wooly@example.com" is a valid email address.
     19PASS "wo..oly@example.com" is a valid email address.
     20PASS "someone@do-ma-in.com" is a valid email address.
     21PASS "someone@do-.com" is a valid email address.
     22PASS "somebody@-.com" is a valid email address.
     23PASS "somebody@example" is a valid email address.
     24PASS "
     25a@p.com
     26" is a valid email address. It was sanitized to "a@p.com".
     27PASS "
     28a@p.com
     29" is a valid email address. It was sanitized to "a@p.com".
     30PASS "a
     31@p.com" is a valid email address. It was sanitized to "a@p.com".
     32PASS "a
     33@p.com" is a valid email address. It was sanitized to "a@p.com".
     34PASS "" is a valid email address.
     35Invalid single addresses when 'multiple' attribute is not set.
     36PASS "invalid:email@example.com" is a invalid email address.
     37PASS "@somewhere.com" is a invalid email address.
     38PASS "example.com" is a invalid email address.
     39PASS "@@example.com" is a invalid email address.
     40PASS "a space@example.com" is a invalid email address.
     41PASS "something@ex..ample.com" is a invalid email address.
     42PASS "a@c" is a invalid email address.
     43PASS "someone@somewhere.com." is a invalid email address.
     44PASS """testlah""@example.com" is a invalid email address.
     45PASS ""testblah"@example.com" is a invalid email address.
     46PASS "someone@somewhere.com@" is a invalid email address.
     47PASS "someone@somewhere_com" is a invalid email address.
     48PASS "someone@some:where.com" is a invalid email address.
     49PASS "." is a invalid email address.
     50PASS "F/s/f/a@feo+re.com" is a invalid email address.
     51PASS "some+long+email+address@some+host-weird-/looking.com" is a invalid email address.
     52PASS " " is a invalid email address.
     53PASS " a@p.com" is a invalid email address.
     54PASS "a@p.com " is a invalid email address.
     55PASS " a@p.com " is a invalid email address.
     56PASS " a@p.com " is a invalid email address.
     57PASS "  a@p.com " is a invalid email address.
     58PASS "
     59a@p.com
     60" is a invalid email address.
     61PASS "
     62a@p.com
     63" is a invalid email address.
     64PASS " a@p.com " is a invalid email address.
     65PASS " a@p.com " is a invalid email address.
     66PASS "a @p.com" is a invalid email address.
     67PASS "a @p.com" is a invalid email address.
     68PASS "a @p.com" is a invalid email address.
     69PASS "a
     70@p.com" is a invalid email address.
     71PASS "a
     72@p.com" is a invalid email address.
     73PASS "a @p.com" is a invalid email address.
     74PASS "a @p.com" is a invalid email address.
     75Valid single addresses when 'multiple' attribute is set.
     76PASS "something@something.com" is a valid email address list.
     77PASS "someone@localhost.localdomain" is a valid email address list.
     78PASS "someone@127.0.0.1" is a valid email address list.
     79PASS "a@b.b" is a valid email address list.
     80PASS "a/b@domain.com" is a valid email address list.
     81PASS "{}@domain.com" is a valid email address list.
     82PASS "ddjk-s-jk@asl-.com" is a valid email address list.
     83PASS "m*'!%@something.sa" is a valid email address list.
     84PASS "tu!!7n7.ad##0!!!@company.ca" is a valid email address list.
     85PASS "%@com.com" is a valid email address list.
     86PASS "!#$%&'*+/=?^_`{|}~.-@com.com" is a valid email address list.
     87PASS ".wooly@example.com" is a valid email address list.
     88PASS "wo..oly@example.com" is a valid email address list.
     89PASS "someone@do-ma-in.com" is a valid email address list.
     90PASS "someone@do-.com" is a valid email address list.
     91PASS "somebody@-.com" is a valid email address list.
     92PASS "somebody@example" is a valid email address list.
     93PASS " a@p.com " is a valid email address list. It was sanitized to "a@p.com".
     94PASS "  a@p.com " is a valid email address list. It was sanitized to "a@p.com".
     95PASS "
     96a@p.com
     97" is a valid email address list. It was sanitized to "a@p.com".
     98PASS "
     99a@p.com
     100" is a valid email address list. It was sanitized to "a@p.com".
     101PASS "
     102a@p.com
     103" is a valid email address list. It was sanitized to "a@p.com".
     104PASS "a
     105@p.com" is a valid email address list. It was sanitized to "a@p.com".
     106PASS "a
     107@p.com" is a valid email address list. It was sanitized to "a@p.com".
     108PASS "" is a valid email address list.
     109PASS " " is a valid email address list. It was sanitized to "".
     110PASS " a@p.com" is a valid email address list. It was sanitized to "a@p.com".
     111PASS "a@p.com " is a valid email address list. It was sanitized to "a@p.com".
     112PASS " a@p.com " is a valid email address list. It was sanitized to "a@p.com".
     113Invalid single addresses when 'multiple' attribute is set.
     114PASS "invalid:email@example.com" is a invalid email address list.
     115PASS "@somewhere.com" is a invalid email address list.
     116PASS "example.com" is a invalid email address list.
     117PASS "@@example.com" is a invalid email address list.
     118PASS "a space@example.com" is a invalid email address list.
     119PASS "something@ex..ample.com" is a invalid email address list.
     120PASS "a@c" is a invalid email address list.
     121PASS "someone@somewhere.com." is a invalid email address list.
     122PASS """testlah""@example.com" is a invalid email address list.
     123PASS ""testblah"@example.com" is a invalid email address list.
     124PASS "someone@somewhere.com@" is a invalid email address list.
     125PASS "someone@somewhere_com" is a invalid email address list.
     126PASS "someone@some:where.com" is a invalid email address list.
     127PASS "." is a invalid email address list.
     128PASS "F/s/f/a@feo+re.com" is a invalid email address list.
     129PASS "some+long+email+address@some+host-weird-/looking.com" is a invalid email address list.
     130PASS "
     131a@p.com
     132" is a invalid email address list.
     133PASS " a@p.com " is a invalid email address list.
     134PASS " a@p.com " is a invalid email address list.
     135PASS "a @p.com" is a invalid email address list.
     136PASS "a @p.com" is a invalid email address list.
     137PASS "a @p.com" is a invalid email address list.
     138PASS "a
     139@p.com" is a invalid email address list.
     140PASS "a
     141@p.com" is a invalid email address list.
     142PASS "a @p.com" is a invalid email address list.
     143PASS "a @p.com" is a invalid email address list.
     144Valid multiple addresses when 'multiple' attribute is set.
     145PASS "someone@somewhere.com,john@doe.com,a@b.c,a/b@c.c,ualla@ualla.127" is a valid email address list.
     146PASS "tu!!7n7.ad##0!!!@company.ca,F/s/f/a@feo-re.com,m*'@a.b" is a valid email address list.
     147PASS " a@p.com,b@p.com" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     148PASS "a@p.com ,b@p.com" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     149PASS "a@p.com, b@p.com" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     150PASS "a@p.com,b@p.com " is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     151PASS "   a@p.com   ,   b@p.com   " is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     152PASS " a@p.com , b@p.com " is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     153PASS "  a@p.com ,       b@p.com " is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     154PASS "
     155a@p.com
     156,
     157b@p.com
     158" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     159PASS "
     160a@p.com
     161,
     162b@p.com
     163" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     164PASS "
     165a@p.com
     166,
     167b@p.com
     168" is a valid email address list. It was sanitized to "a@p.com,b@p.com".
     169Invalid multiple addresses when 'multiple' attribute is set.
     170PASS "someone@somewhere.com,john@doe..com,a@b,a/b@c,ualla@ualla.127" is a invalid email address list.
     171PASS "some+long+email+address@some+host:weird-/looking.com,F/s/f/a@feo+re.com,,m*'@'!%" is a invalid email address list.
     172PASS "   a @p.com   ,   b@p.com   " is a invalid email address list. It was sanitized to "a @p.com,b@p.com".
     173PASS "   a@p.com   ,   b @p.com   " is a invalid email address list. It was sanitized to "a@p.com,b @p.com".
     174PASS "
     175a@p.com
     176,
     177b@p.com
     178" is a invalid email address list.
     179PASS " a@p.com , b@p.com " is a invalid email address list.
     180PASS " a@p.com , b@p.com " is a invalid email address list.
     181PASS ",," is a invalid email address list.
     182PASS " ,," is a invalid email address list. It was sanitized to ",,".
     183PASS ", ," is a invalid email address list. It was sanitized to ",,".
     184PASS ",, " is a invalid email address list. It was sanitized to ",,".
     185PASS "  ,  ,  " is a invalid email address list. It was sanitized to ",,".
     186PASS " , , " is a invalid email address list. It was sanitized to ",,".
     187PASS "  ,       ,       " is a invalid email address list. It was sanitized to ",,".
     188PASS "
     189,
     190,
     191" is a invalid email address list. It was sanitized to ",,".
     192PASS "
     193,
     194,
     195" is a invalid email address list.
     196PASS "
     197,
     198,
     199" is a invalid email address list. It was sanitized to ",,".
     200PASS "
     201,
     202,
     203" is a invalid email address list. It was sanitized to ",,".
     204PASS " , , " is a invalid email address list.
     205PASS " , , " is a invalid email address list.
    45206PASS successfullyParsed is true
    46207
  • trunk/LayoutTests/fast/forms/resources/ValidityState-typeMismatch-email.js

    r86298 r89915  
    1 description("This test aims to check for typeMismatch flag with type=email input fields.");
     1description("This test aims to check for typeMismatch flag and sanitization with type=email input fields.");
    22
    33var i = document.createElement('input');
    44i.type = 'email';
    55
    6 function emailCheck(val, expectedValid)
     6function emailCheck(value, expectedValue, expectedMismatch, multiple)
    77{
    8     i.value = val;
    9     var vs = i.validity.typeMismatch;
    10     var didPass = vs == expectedValid;
    11     var didPassText = didPass ? "a correct" : "an incorrect";
    12     var validityText = vs ? "invalid" : "valid";
    13     var multipleText = i.multiple ? "list" : "";
    14     var resultText = val + " is " + didPassText + " " + validityText + " email address " + multipleText;
    15     if (didPass)
    16         testPassed(resultText);
     8    i.value = value;
     9    i.multiple = !!multiple;
     10    var mismatch = i.validity.typeMismatch;
     11    var mismatchPass = mismatch == expectedMismatch;
     12    var sanitizePass = i.value == expectedValue;
     13    var mismatchResult = '"' + value + '" is a ' + (mismatch ? 'invalid' : 'valid') + ' email address' + (multiple ? ' list. ' : '. ');
     14    var sanitizeResult = 'It was sanitized to "' + i.value + '"' + (sanitizePass ? '.' : ', but should be sanitized to "' + expectedValue + '"');
     15    var result = mismatchResult;
     16    if (value != expectedValue || !sanitizePass)
     17        result += sanitizeResult;
     18
     19    if (mismatchPass && sanitizePass)
     20        testPassed(result);
    1721    else
    18         testFailed(resultText);
     22        testFailed(result);
    1923}
    2024
    21 // VALID
    22 emailCheck("something@something.com", false);
    23 emailCheck("someone@localhost.localdomain", false);
    24 emailCheck("someone@127.0.0.1", false);
    25 emailCheck("a@b.b", false);
    26 emailCheck("a/b@domain.com", false);
    27 emailCheck("{}@domain.com", false);
    28 emailCheck("ddjk-s-jk@asl-.com", false);
    29 emailCheck("m*'!%@something.sa", false);
    30 emailCheck("tu!!7n7.ad##0!!!@company.ca", false);
    31 emailCheck("%@com.com", false);
    32 emailCheck("!#$%&'*+/=?^_`{|}~.-@com.com", false);
    33 emailCheck(".wooly@example.com", false);
    34 emailCheck("wo..oly@example.com", false);
    35 emailCheck("someone@do-ma-in.com", false);
    36 emailCheck("someone@do-.com", false);
    37 emailCheck("somebody@-.com", false);
    38 emailCheck("somebody@example", false);
     25var expectValid = false;
     26var expectInvalid = true;
     27var multiple = true;
    3928
    40 // INVALID
    41 emailCheck("invalid:email@example.com", true);
    42 emailCheck("@somewhere.com", true);
    43 emailCheck("example.com", true);
    44 emailCheck("@@example.com", true);
    45 emailCheck("a space@example.com", true);
    46 emailCheck("something@ex..ample.com", true);
    47 emailCheck("a\b@c", true);
    48 emailCheck("someone@somewhere.com.", true);
    49 emailCheck("\"\"test\blah\"\"@example.com", true);
    50 emailCheck("\"testblah\"@example.com", true);
    51 emailCheck("someone@somewhere.com@", true);
    52 emailCheck("someone@somewhere_com", true);
    53 emailCheck("someone@some:where.com", true);
    54 emailCheck(".", true);
    55 emailCheck("F/s/f/a@feo+re.com", true);
    56 emailCheck("some+long+email+address@some+host-weird-/looking.com", true);
     29debug("Valid single addresses when 'multiple' attribute is not set.");
     30emailCheck("something@something.com", "something@something.com", expectValid);
     31emailCheck("someone@localhost.localdomain", "someone@localhost.localdomain", expectValid);
     32emailCheck("someone@127.0.0.1", "someone@127.0.0.1", expectValid);
     33emailCheck("a@b.b", "a@b.b", expectValid);
     34emailCheck("a/b@domain.com", "a/b@domain.com", expectValid);
     35emailCheck("{}@domain.com", "{}@domain.com", expectValid);
     36emailCheck("ddjk-s-jk@asl-.com", "ddjk-s-jk@asl-.com", expectValid);
     37emailCheck("m*'!%@something.sa", "m*'!%@something.sa", expectValid);
     38emailCheck("tu!!7n7.ad##0!!!@company.ca", "tu!!7n7.ad##0!!!@company.ca", expectValid);
     39emailCheck("%@com.com", "%@com.com", expectValid);
     40emailCheck("!#$%&'*+/=?^_`{|}~.-@com.com", "!#$%&'*+/=?^_`{|}~.-@com.com", expectValid);
     41emailCheck(".wooly@example.com", ".wooly@example.com", expectValid);
     42emailCheck("wo..oly@example.com", "wo..oly@example.com", expectValid);
     43emailCheck("someone@do-ma-in.com", "someone@do-ma-in.com", expectValid);
     44emailCheck("someone@do-.com", "someone@do-.com", expectValid);
     45emailCheck("somebody@-.com", "somebody@-.com", expectValid);
     46emailCheck("somebody@example", "somebody@example", expectValid);
     47emailCheck("\u000Aa@p.com\u000A", "a@p.com", expectValid);
     48emailCheck("\u000Da@p.com\u000D", "a@p.com", expectValid);
     49emailCheck("a\u000A@p.com", "a@p.com", expectValid);
     50emailCheck("a\u000D@p.com", "a@p.com", expectValid);
     51emailCheck("", "", expectValid);
    5752
    58 i.multiple = true;
     53debug("Invalid single addresses when 'multiple' attribute is not set.");
     54emailCheck("invalid:email@example.com", "invalid:email@example.com", expectInvalid);
     55emailCheck("@somewhere.com", "@somewhere.com", expectInvalid);
     56emailCheck("example.com", "example.com", expectInvalid);
     57emailCheck("@@example.com", "@@example.com", expectInvalid);
     58emailCheck("a space@example.com", "a space@example.com", expectInvalid);
     59emailCheck("something@ex..ample.com", "something@ex..ample.com", expectInvalid);
     60emailCheck("a\b@c", "a\b@c", expectInvalid);
     61emailCheck("someone@somewhere.com.", "someone@somewhere.com.", expectInvalid);
     62emailCheck("\"\"test\blah\"\"@example.com", "\"\"test\blah\"\"@example.com", expectInvalid);
     63emailCheck("\"testblah\"@example.com", "\"testblah\"@example.com", expectInvalid);
     64emailCheck("someone@somewhere.com@", "someone@somewhere.com@", expectInvalid);
     65emailCheck("someone@somewhere_com", "someone@somewhere_com", expectInvalid);
     66emailCheck("someone@some:where.com", "someone@some:where.com", expectInvalid);
     67emailCheck(".", ".", expectInvalid);
     68emailCheck("F/s/f/a@feo+re.com", "F/s/f/a@feo+re.com", expectInvalid);
     69emailCheck("some+long+email+address@some+host-weird-/looking.com", "some+long+email+address@some+host-weird-/looking.com", expectInvalid);
     70emailCheck(" ", " ", expectInvalid);
     71emailCheck(" a@p.com", " a@p.com", expectInvalid);
     72emailCheck("a@p.com ", "a@p.com ", expectInvalid);
     73emailCheck(" a@p.com ", " a@p.com ", expectInvalid);
     74emailCheck("\u0020a@p.com\u0020", "\u0020a@p.com\u0020", expectInvalid);
     75emailCheck("\u0009a@p.com\u0009", "\u0009a@p.com\u0009", expectInvalid);
     76emailCheck("\u000Ba@p.com\u000B", "\u000Ba@p.com\u000B", expectInvalid);
     77emailCheck("\u000Ca@p.com\u000C", "\u000Ca@p.com\u000C", expectInvalid);
     78emailCheck("\u2003a@p.com\u2003", "\u2003a@p.com\u2003", expectInvalid);
     79emailCheck("\u3000a@p.com\u3000", "\u3000a@p.com\u3000", expectInvalid);
     80emailCheck("a @p.com", "a @p.com", expectInvalid);
     81emailCheck("a\u0020@p.com", "a\u0020@p.com", expectInvalid);
     82emailCheck("a\u0009@p.com", "a\u0009@p.com", expectInvalid);
     83emailCheck("a\u000B@p.com", "a\u000B@p.com", expectInvalid);
     84emailCheck("a\u000C@p.com", "a\u000C@p.com", expectInvalid);
     85emailCheck("a\u2003@p.com", "a\u2003@p.com", expectInvalid);
     86emailCheck("a\u3000@p.com", "a\u3000@p.com", expectInvalid);
    5987
    60 // VALID MULTIPLE
    61 emailCheck("someone@somewhere.com,john@doe.com,a@b.c,a/b@c.c,ualla@ualla.127", false)
    62 emailCheck("tu!!7n7.ad##0!!!@company.ca,F/s/f/a@feo-re.com,m*'@a.b", false)
    63 emailCheck(",,,,,,,,,,,", false)
     88debug("Valid single addresses when 'multiple' attribute is set.");
     89emailCheck("something@something.com", "something@something.com", expectValid, multiple);
     90emailCheck("someone@localhost.localdomain", "someone@localhost.localdomain", expectValid, multiple);
     91emailCheck("someone@127.0.0.1", "someone@127.0.0.1", expectValid, multiple);
     92emailCheck("a@b.b", "a@b.b", expectValid, multiple);
     93emailCheck("a/b@domain.com", "a/b@domain.com", expectValid, multiple);
     94emailCheck("{}@domain.com", "{}@domain.com", expectValid, multiple);
     95emailCheck("ddjk-s-jk@asl-.com", "ddjk-s-jk@asl-.com", expectValid, multiple);
     96emailCheck("m*'!%@something.sa", "m*'!%@something.sa", expectValid, multiple);
     97emailCheck("tu!!7n7.ad##0!!!@company.ca", "tu!!7n7.ad##0!!!@company.ca", expectValid, multiple);
     98emailCheck("%@com.com", "%@com.com", expectValid, multiple);
     99emailCheck("!#$%&'*+/=?^_`{|}~.-@com.com", "!#$%&'*+/=?^_`{|}~.-@com.com", expectValid, multiple);
     100emailCheck(".wooly@example.com", ".wooly@example.com", expectValid, multiple);
     101emailCheck("wo..oly@example.com", "wo..oly@example.com", expectValid, multiple);
     102emailCheck("someone@do-ma-in.com", "someone@do-ma-in.com", expectValid, multiple);
     103emailCheck("someone@do-.com", "someone@do-.com", expectValid, multiple);
     104emailCheck("somebody@-.com", "somebody@-.com", expectValid, multiple);
     105emailCheck("somebody@example", "somebody@example", expectValid, multiple);
     106emailCheck("\u0020a@p.com\u0020", "a@p.com", expectValid, multiple);
     107emailCheck("\u0009a@p.com\u0009", "a@p.com", expectValid, multiple);
     108emailCheck("\u000Aa@p.com\u000A", "a@p.com", expectValid, multiple);
     109emailCheck("\u000Ca@p.com\u000C", "a@p.com", expectValid, multiple);
     110emailCheck("\u000Da@p.com\u000D", "a@p.com", expectValid, multiple);
     111emailCheck("a\u000A@p.com", "a@p.com", expectValid, multiple);
     112emailCheck("a\u000D@p.com", "a@p.com", expectValid, multiple);
     113emailCheck("", "", expectValid, multiple);
     114emailCheck(" ", "", expectValid, multiple);
     115emailCheck(" a@p.com", "a@p.com", expectValid, multiple);
     116emailCheck("a@p.com ", "a@p.com", expectValid, multiple);
     117emailCheck(" a@p.com ", "a@p.com", expectValid, multiple);
    64118
    65 // INVALID MULTIPLE (true on the first invalid occurrence)
    66 emailCheck("someone@somewhere.com,john@doe..com,a@b,a/b@c,ualla@ualla.127", true)
    67 emailCheck("some+long+email+address@some+host:weird-/looking.com,F/s/f/a@feo+re.com,,m*'@'!%", true)
    68 emailCheck(",,,,,,,,, ,,", true)
     119debug("Invalid single addresses when 'multiple' attribute is set.");
     120emailCheck("invalid:email@example.com", "invalid:email@example.com", expectInvalid, multiple);
     121emailCheck("@somewhere.com", "@somewhere.com", expectInvalid, multiple);
     122emailCheck("example.com", "example.com", expectInvalid, multiple);
     123emailCheck("@@example.com", "@@example.com", expectInvalid, multiple);
     124emailCheck("a space@example.com", "a space@example.com", expectInvalid, multiple);
     125emailCheck("something@ex..ample.com", "something@ex..ample.com", expectInvalid, multiple);
     126emailCheck("a\b@c", "a\b@c", expectInvalid, multiple);
     127emailCheck("someone@somewhere.com.", "someone@somewhere.com.", expectInvalid, multiple);
     128emailCheck("\"\"test\blah\"\"@example.com", "\"\"test\blah\"\"@example.com", expectInvalid, multiple);
     129emailCheck("\"testblah\"@example.com", "\"testblah\"@example.com", expectInvalid, multiple);
     130emailCheck("someone@somewhere.com@", "someone@somewhere.com@", expectInvalid, multiple);
     131emailCheck("someone@somewhere_com", "someone@somewhere_com", expectInvalid, multiple);
     132emailCheck("someone@some:where.com", "someone@some:where.com", expectInvalid, multiple);
     133emailCheck(".", ".", expectInvalid, multiple);
     134emailCheck("F/s/f/a@feo+re.com", "F/s/f/a@feo+re.com", expectInvalid, multiple);
     135emailCheck("some+long+email+address@some+host-weird-/looking.com", "some+long+email+address@some+host-weird-/looking.com", expectInvalid, multiple);
     136emailCheck("\u000Ba@p.com\u000B", "\u000Ba@p.com\u000B", expectInvalid, multiple);
     137emailCheck("\u2003a@p.com\u2003", "\u2003a@p.com\u2003", expectInvalid, multiple);
     138emailCheck("\u3000a@p.com\u3000", "\u3000a@p.com\u3000", expectInvalid, multiple);
     139emailCheck("a @p.com", "a @p.com", expectInvalid, multiple);
     140emailCheck("a\u0020@p.com", "a\u0020@p.com", expectInvalid, multiple);
     141emailCheck("a\u0009@p.com", "a\u0009@p.com", expectInvalid, multiple);
     142emailCheck("a\u000B@p.com", "a\u000B@p.com", expectInvalid, multiple);
     143emailCheck("a\u000C@p.com", "a\u000C@p.com", expectInvalid, multiple);
     144emailCheck("a\u2003@p.com", "a\u2003@p.com", expectInvalid, multiple);
     145emailCheck("a\u3000@p.com", "a\u3000@p.com", expectInvalid, multiple);
     146
     147debug("Valid multiple addresses when 'multiple' attribute is set.");
     148emailCheck("someone@somewhere.com,john@doe.com,a@b.c,a/b@c.c,ualla@ualla.127", "someone@somewhere.com,john@doe.com,a@b.c,a/b@c.c,ualla@ualla.127", expectValid, multiple);
     149emailCheck("tu!!7n7.ad##0!!!@company.ca,F/s/f/a@feo-re.com,m*'@a.b", "tu!!7n7.ad##0!!!@company.ca,F/s/f/a@feo-re.com,m*'@a.b", expectValid, multiple);
     150emailCheck(" a@p.com,b@p.com", "a@p.com,b@p.com", expectValid, multiple);
     151emailCheck("a@p.com ,b@p.com", "a@p.com,b@p.com", expectValid, multiple);
     152emailCheck("a@p.com, b@p.com", "a@p.com,b@p.com", expectValid, multiple);
     153emailCheck("a@p.com,b@p.com ", "a@p.com,b@p.com", expectValid, multiple);
     154emailCheck("   a@p.com   ,   b@p.com   ", "a@p.com,b@p.com", expectValid, multiple);
     155emailCheck("\u0020a@p.com\u0020,\u0020b@p.com\u0020", "a@p.com,b@p.com", expectValid, multiple);
     156emailCheck("\u0009a@p.com\u0009,\u0009b@p.com\u0009", "a@p.com,b@p.com", expectValid, multiple);
     157emailCheck("\u000Aa@p.com\u000A,\u000Ab@p.com\u000A", "a@p.com,b@p.com", expectValid, multiple);
     158emailCheck("\u000Ca@p.com\u000C,\u000Cb@p.com\u000C", "a@p.com,b@p.com", expectValid, multiple);
     159emailCheck("\u000Da@p.com\u000D,\u000Db@p.com\u000D", "a@p.com,b@p.com", expectValid, multiple);
     160
     161debug("Invalid multiple addresses when 'multiple' attribute is set.");
     162emailCheck("someone@somewhere.com,john@doe..com,a@b,a/b@c,ualla@ualla.127", "someone@somewhere.com,john@doe..com,a@b,a/b@c,ualla@ualla.127", expectInvalid, multiple);
     163emailCheck("some+long+email+address@some+host:weird-/looking.com,F/s/f/a@feo+re.com,,m*'@'!%", "some+long+email+address@some+host:weird-/looking.com,F/s/f/a@feo+re.com,,m*'@'!%", expectInvalid, multiple);
     164emailCheck("   a @p.com   ,   b@p.com   ", "a @p.com,b@p.com", expectInvalid, multiple);
     165emailCheck("   a@p.com   ,   b @p.com   ", "a@p.com,b @p.com", expectInvalid, multiple);
     166emailCheck("\u000Ba@p.com\u000B,\u000Bb@p.com\u000B", "\u000Ba@p.com\u000B,\u000Bb@p.com\u000B", expectInvalid, multiple);
     167emailCheck("\u2003a@p.com\u2003,\u2003b@p.com\u2003", "\u2003a@p.com\u2003,\u2003b@p.com\u2003", expectInvalid, multiple);
     168emailCheck("\u3000a@p.com\u3000,\u3000b@p.com\u3000", "\u3000a@p.com\u3000,\u3000b@p.com\u3000", expectInvalid, multiple);
     169emailCheck(",,", ",,", expectInvalid, multiple);
     170emailCheck(" ,,", ",,", expectInvalid, multiple);
     171emailCheck(", ,", ",,", expectInvalid, multiple);
     172emailCheck(",, ", ",,", expectInvalid, multiple);
     173emailCheck("  ,  ,  ", ",,", expectInvalid, multiple);
     174emailCheck("\u0020,\u0020,\u0020", ",,", expectInvalid, multiple);
     175emailCheck("\u0009,\u0009,\u0009", ",,", expectInvalid, multiple);
     176emailCheck("\u000A,\u000A,\u000A", ",,", expectInvalid, multiple);
     177emailCheck("\u000B,\u000B,\u000B", "\u000B,\u000B,\u000B", expectInvalid, multiple);
     178emailCheck("\u000C,\u000C,\u000C", ",,", expectInvalid, multiple);
     179emailCheck("\u000D,\u000D,\u000D", ",,", expectInvalid, multiple);
     180emailCheck("\u2003,\u2003,\u2003", "\u2003,\u2003,\u2003", expectInvalid, multiple);
     181emailCheck("\u3000,\u3000,\u3000", "\u3000,\u3000,\u3000", expectInvalid, multiple);
     182
    69183
    70184var successfullyParsed = true;
  • trunk/Source/WebCore/ChangeLog

    r89913 r89915  
     12011-06-28  Kentaro Hara  <haraken@google.com>
     2
     3        Reviewed by Kent Tamura.
     4
     5        Allow spaces between e-mail addresses in 'email' input type.
     6        https://bugs.webkit.org/show_bug.cgi?id=55987
     7
     8        Allowed spaces between e-mail addresses in 'email' input type,
     9        e.g. ' a@p.com , b@p.com ' is a valid value. Implemented the
     10        value sanitization algorithm for an e-mail value.  Added more unit
     11        tests that check the e-mail value parser.
     12
     13        Test: fast/forms/ValidityState-typeMismatch-email.html
     14
     15        * html/EmailInputType.cpp:
     16        (WebCore::EmailInputType::typeMismatchFor):
     17        (WebCore::EmailInputType::sanitizeValue):
     18        * html/EmailInputType.h:
     19        * html/parser/HTMLParserIdioms.cpp:
     20        (WebCore::stripHTMLLineBreaks):
     21        * html/parser/HTMLParserIdioms.h:
     22        (WebCore::isHTMLLineBreak):
     23
    1242011-06-28  Kent Tamura  <tkent@chromium.org>
    225
  • trunk/Source/WebCore/html/EmailInputType.cpp

    r86298 r89915  
    2626
    2727#include "HTMLInputElement.h"
     28#include "HTMLParserIdioms.h"
    2829#include "LocalizedStrings.h"
    2930#include "RegularExpression.h"
    3031#include <wtf/PassOwnPtr.h>
     32#include <wtf/text/StringBuilder.h>
    3133
    3234namespace WebCore {
     
    6870        return !isValidEmailAddress(value);
    6971    Vector<String> addresses;
    70     value.split(',', addresses);
     72    value.split(',', true, addresses);
    7173    for (unsigned i = 0; i < addresses.size(); ++i) {
    72         if (!isValidEmailAddress(addresses[i]))
     74        if (!isValidEmailAddress(stripLeadingAndTrailingHTMLSpaces(addresses[i])))
    7375            return true;
    7476    }
     
    9193}
    9294
     95String EmailInputType::sanitizeValue(const String& proposedValue)
     96{
     97    String noLineBreakValue = proposedValue.removeCharacters(isHTMLLineBreak);
     98    if (!element()->multiple())
     99        return noLineBreakValue;
     100    Vector<String> addresses;
     101    noLineBreakValue.split(',', true, addresses);
     102    StringBuilder strippedValue;
     103    for (unsigned i = 0; i < addresses.size(); ++i) {
     104        if (i > 0)
     105            strippedValue.append(",");
     106        strippedValue.append(stripLeadingAndTrailingHTMLSpaces(addresses[i]));
     107    }
     108    return strippedValue.toString();
     109}
     110
    93111} // namespace WebCore
  • trunk/Source/WebCore/html/EmailInputType.h

    r74895 r89915  
    4747    virtual String typeMismatchText() const;
    4848    virtual bool isEmailField() const;
     49    virtual String sanitizeValue(const String&);
    4950};
    5051
  • trunk/Source/WebCore/html/parser/HTMLParserIdioms.cpp

    r77774 r89915  
    3030#include <wtf/dtoa.h>
    3131#include <wtf/text/AtomicString.h>
     32#include <wtf/text/StringBuilder.h>
    3233
    3334namespace WebCore {
  • trunk/Source/WebCore/html/parser/HTMLParserIdioms.h

    r71622 r89915  
    3333// Space characters as defined by the HTML specification.
    3434bool isHTMLSpace(UChar);
     35bool isHTMLLineBreak(UChar);
    3536bool isNotHTMLSpace(UChar);
    3637
     
    6768}
    6869
     70inline bool isHTMLLineBreak(UChar character)
     71{
     72    return character <= '\r' && (character == '\n' || character == '\r');
     73}
     74
    6975inline bool isNotHTMLSpace(UChar character)
    7076{
Note: See TracChangeset for help on using the changeset viewer.