Changeset 206266 in webkit


Ignore:
Timestamp:
Sep 22, 2016 11:47:34 AM (8 years ago)
Author:
Chris Dumez
Message:

Fix serialization of HTML void elements when they have children
https://bugs.webkit.org/show_bug.cgi?id=162418

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Rebaseline W3C test now that more checks are passing.

  • web-platform-tests/html/syntax/serializing-html-fragments/serializing-expected.txt:

Source/WebCore:

Fix serialization of HTML void elements when they have children.

Void elements (such as <hr>) cannot have a closing tag. When
encountering them, we would properly not serialize the void
element's children (if it had any). However, we would incorrectly
append an end tag (because the element technically has children).

Relevant specification:

In particular, this part:
""
If current node is an area, base, basefont, bgsound, br, col, embed,
frame, hr, img, input, keygen, link, meta, param, source, track or wbr
element, then continue on to the next child node at this point.
""

Firefox matches the specification.

No new tests, rebaselined existing test.

  • editing/MarkupAccumulator.cpp:

(WebCore::MarkupAccumulator::serializeNodesWithNamespaces):

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r206260 r206266  
     12016-09-22  Chris Dumez  <cdumez@apple.com>
     2
     3        Fix serialization of HTML void elements when they have children
     4        https://bugs.webkit.org/show_bug.cgi?id=162418
     5
     6        Reviewed by Darin Adler.
     7
     8        Rebaseline W3C test now that more checks are passing.
     9
     10        * web-platform-tests/html/syntax/serializing-html-fragments/serializing-expected.txt:
     11
    1122016-09-22  Youenn Fablet  <youenn@apple.com>
    213
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/syntax/serializing-html-fragments/serializing-expected.txt

    r206246 r206266  
    109109PASS innerHTML Void context node track
    110110PASS innerHTML Void context node wbr
    111 FAIL innerHTML void as first child with following siblings area assert_equals: expected "<area><a>test</a><b></b>" but got "<area></area><a>test</a><b></b>"
    112 FAIL innerHTML void as first child with following siblings base assert_equals: expected "<base><a>test</a><b></b>" but got "<base></base><a>test</a><b></b>"
    113 FAIL innerHTML void as first child with following siblings basefont assert_equals: expected "<basefont><a>test</a><b></b>" but got "<basefont></basefont><a>test</a><b></b>"
    114 FAIL innerHTML void as first child with following siblings bgsound assert_equals: expected "<bgsound><a>test</a><b></b>" but got "<bgsound></bgsound><a>test</a><b></b>"
    115 FAIL innerHTML void as first child with following siblings br assert_equals: expected "<br><a>test</a><b></b>" but got "<br></br><a>test</a><b></b>"
    116 FAIL innerHTML void as first child with following siblings col assert_equals: expected "<col><a>test</a><b></b>" but got "<col></col><a>test</a><b></b>"
    117 FAIL innerHTML void as first child with following siblings embed assert_equals: expected "<embed><a>test</a><b></b>" but got "<embed></embed><a>test</a><b></b>"
    118 FAIL innerHTML void as first child with following siblings frame assert_equals: expected "<frame><a>test</a><b></b>" but got "<frame></frame><a>test</a><b></b>"
    119 FAIL innerHTML void as first child with following siblings hr assert_equals: expected "<hr><a>test</a><b></b>" but got "<hr></hr><a>test</a><b></b>"
    120 FAIL innerHTML void as first child with following siblings img assert_equals: expected "<img><a>test</a><b></b>" but got "<img></img><a>test</a><b></b>"
    121 FAIL innerHTML void as first child with following siblings input assert_equals: expected "<input><a>test</a><b></b>" but got "<input></input><a>test</a><b></b>"
    122 FAIL innerHTML void as first child with following siblings keygen assert_equals: expected "<keygen><a>test</a><b></b>" but got "<keygen></keygen><a>test</a><b></b>"
    123 FAIL innerHTML void as first child with following siblings link assert_equals: expected "<link><a>test</a><b></b>" but got "<link></link><a>test</a><b></b>"
     111PASS innerHTML void as first child with following siblings area
     112PASS innerHTML void as first child with following siblings base
     113PASS innerHTML void as first child with following siblings basefont
     114PASS innerHTML void as first child with following siblings bgsound
     115PASS innerHTML void as first child with following siblings br
     116PASS innerHTML void as first child with following siblings col
     117PASS innerHTML void as first child with following siblings embed
     118PASS innerHTML void as first child with following siblings frame
     119PASS innerHTML void as first child with following siblings hr
     120PASS innerHTML void as first child with following siblings img
     121PASS innerHTML void as first child with following siblings input
     122PASS innerHTML void as first child with following siblings keygen
     123PASS innerHTML void as first child with following siblings link
    124124FAIL innerHTML void as first child with following siblings menuitem assert_equals: expected "<menuitem><a>test</a><b></b>" but got "<menuitem><a><!--abc--></a><b><c>abc</c></b></menuitem><a>test</a><b></b>"
    125 FAIL innerHTML void as first child with following siblings meta assert_equals: expected "<meta><a>test</a><b></b>" but got "<meta></meta><a>test</a><b></b>"
    126 FAIL innerHTML void as first child with following siblings param assert_equals: expected "<param><a>test</a><b></b>" but got "<param></param><a>test</a><b></b>"
    127 FAIL innerHTML void as first child with following siblings source assert_equals: expected "<source><a>test</a><b></b>" but got "<source></source><a>test</a><b></b>"
    128 FAIL innerHTML void as first child with following siblings track assert_equals: expected "<track><a>test</a><b></b>" but got "<track></track><a>test</a><b></b>"
    129 FAIL innerHTML void as first child with following siblings wbr assert_equals: expected "<wbr><a>test</a><b></b>" but got "<wbr></wbr><a>test</a><b></b>"
    130 FAIL innerHTML void as second child with following siblings area assert_equals: expected "<a>test</a><area><b></b>" but got "<a>test</a><area></area><b></b>"
    131 FAIL innerHTML void as second child with following siblings base assert_equals: expected "<a>test</a><base><b></b>" but got "<a>test</a><base></base><b></b>"
    132 FAIL innerHTML void as second child with following siblings basefont assert_equals: expected "<a>test</a><basefont><b></b>" but got "<a>test</a><basefont></basefont><b></b>"
    133 FAIL innerHTML void as second child with following siblings bgsound assert_equals: expected "<a>test</a><bgsound><b></b>" but got "<a>test</a><bgsound></bgsound><b></b>"
    134 FAIL innerHTML void as second child with following siblings br assert_equals: expected "<a>test</a><br><b></b>" but got "<a>test</a><br></br><b></b>"
    135 FAIL innerHTML void as second child with following siblings col assert_equals: expected "<a>test</a><col><b></b>" but got "<a>test</a><col></col><b></b>"
    136 FAIL innerHTML void as second child with following siblings embed assert_equals: expected "<a>test</a><embed><b></b>" but got "<a>test</a><embed></embed><b></b>"
    137 FAIL innerHTML void as second child with following siblings frame assert_equals: expected "<a>test</a><frame><b></b>" but got "<a>test</a><frame></frame><b></b>"
    138 FAIL innerHTML void as second child with following siblings hr assert_equals: expected "<a>test</a><hr><b></b>" but got "<a>test</a><hr></hr><b></b>"
    139 FAIL innerHTML void as second child with following siblings img assert_equals: expected "<a>test</a><img><b></b>" but got "<a>test</a><img></img><b></b>"
    140 FAIL innerHTML void as second child with following siblings input assert_equals: expected "<a>test</a><input><b></b>" but got "<a>test</a><input></input><b></b>"
    141 FAIL innerHTML void as second child with following siblings keygen assert_equals: expected "<a>test</a><keygen><b></b>" but got "<a>test</a><keygen></keygen><b></b>"
    142 FAIL innerHTML void as second child with following siblings link assert_equals: expected "<a>test</a><link><b></b>" but got "<a>test</a><link></link><b></b>"
     125PASS innerHTML void as first child with following siblings meta
     126PASS innerHTML void as first child with following siblings param
     127PASS innerHTML void as first child with following siblings source
     128PASS innerHTML void as first child with following siblings track
     129PASS innerHTML void as first child with following siblings wbr
     130PASS innerHTML void as second child with following siblings area
     131PASS innerHTML void as second child with following siblings base
     132PASS innerHTML void as second child with following siblings basefont
     133PASS innerHTML void as second child with following siblings bgsound
     134PASS innerHTML void as second child with following siblings br
     135PASS innerHTML void as second child with following siblings col
     136PASS innerHTML void as second child with following siblings embed
     137PASS innerHTML void as second child with following siblings frame
     138PASS innerHTML void as second child with following siblings hr
     139PASS innerHTML void as second child with following siblings img
     140PASS innerHTML void as second child with following siblings input
     141PASS innerHTML void as second child with following siblings keygen
     142PASS innerHTML void as second child with following siblings link
    143143FAIL innerHTML void as second child with following siblings menuitem assert_equals: expected "<a>test</a><menuitem><b></b>" but got "<a>test</a><menuitem><a><!--abc--></a><b><c>abc</c></b></menuitem><b></b>"
    144 FAIL innerHTML void as second child with following siblings meta assert_equals: expected "<a>test</a><meta><b></b>" but got "<a>test</a><meta></meta><b></b>"
    145 FAIL innerHTML void as second child with following siblings param assert_equals: expected "<a>test</a><param><b></b>" but got "<a>test</a><param></param><b></b>"
    146 FAIL innerHTML void as second child with following siblings source assert_equals: expected "<a>test</a><source><b></b>" but got "<a>test</a><source></source><b></b>"
    147 FAIL innerHTML void as second child with following siblings track assert_equals: expected "<a>test</a><track><b></b>" but got "<a>test</a><track></track><b></b>"
    148 FAIL innerHTML void as second child with following siblings wbr assert_equals: expected "<a>test</a><wbr><b></b>" but got "<a>test</a><wbr></wbr><b></b>"
    149 FAIL innerHTML void as last child with preceding siblings area assert_equals: expected "<a>test</a><b></b><area>" but got "<a>test</a><b></b><area></area>"
    150 FAIL innerHTML void as last child with preceding siblings base assert_equals: expected "<a>test</a><b></b><base>" but got "<a>test</a><b></b><base></base>"
    151 FAIL innerHTML void as last child with preceding siblings basefont assert_equals: expected "<a>test</a><b></b><basefont>" but got "<a>test</a><b></b><basefont></basefont>"
    152 FAIL innerHTML void as last child with preceding siblings bgsound assert_equals: expected "<a>test</a><b></b><bgsound>" but got "<a>test</a><b></b><bgsound></bgsound>"
    153 FAIL innerHTML void as last child with preceding siblings br assert_equals: expected "<a>test</a><b></b><br>" but got "<a>test</a><b></b><br></br>"
    154 FAIL innerHTML void as last child with preceding siblings col assert_equals: expected "<a>test</a><b></b><col>" but got "<a>test</a><b></b><col></col>"
    155 FAIL innerHTML void as last child with preceding siblings embed assert_equals: expected "<a>test</a><b></b><embed>" but got "<a>test</a><b></b><embed></embed>"
    156 FAIL innerHTML void as last child with preceding siblings frame assert_equals: expected "<a>test</a><b></b><frame>" but got "<a>test</a><b></b><frame></frame>"
    157 FAIL innerHTML void as last child with preceding siblings hr assert_equals: expected "<a>test</a><b></b><hr>" but got "<a>test</a><b></b><hr></hr>"
    158 FAIL innerHTML void as last child with preceding siblings img assert_equals: expected "<a>test</a><b></b><img>" but got "<a>test</a><b></b><img></img>"
    159 FAIL innerHTML void as last child with preceding siblings input assert_equals: expected "<a>test</a><b></b><input>" but got "<a>test</a><b></b><input></input>"
    160 FAIL innerHTML void as last child with preceding siblings keygen assert_equals: expected "<a>test</a><b></b><keygen>" but got "<a>test</a><b></b><keygen></keygen>"
    161 FAIL innerHTML void as last child with preceding siblings link assert_equals: expected "<a>test</a><b></b><link>" but got "<a>test</a><b></b><link></link>"
     144PASS innerHTML void as second child with following siblings meta
     145PASS innerHTML void as second child with following siblings param
     146PASS innerHTML void as second child with following siblings source
     147PASS innerHTML void as second child with following siblings track
     148PASS innerHTML void as second child with following siblings wbr
     149PASS innerHTML void as last child with preceding siblings area
     150PASS innerHTML void as last child with preceding siblings base
     151PASS innerHTML void as last child with preceding siblings basefont
     152PASS innerHTML void as last child with preceding siblings bgsound
     153PASS innerHTML void as last child with preceding siblings br
     154PASS innerHTML void as last child with preceding siblings col
     155PASS innerHTML void as last child with preceding siblings embed
     156PASS innerHTML void as last child with preceding siblings frame
     157PASS innerHTML void as last child with preceding siblings hr
     158PASS innerHTML void as last child with preceding siblings img
     159PASS innerHTML void as last child with preceding siblings input
     160PASS innerHTML void as last child with preceding siblings keygen
     161PASS innerHTML void as last child with preceding siblings link
    162162FAIL innerHTML void as last child with preceding siblings menuitem assert_equals: expected "<a>test</a><b></b><menuitem>" but got "<a>test</a><b></b><menuitem><a><!--abc--></a><b><c>abc</c></b></menuitem>"
    163 FAIL innerHTML void as last child with preceding siblings meta assert_equals: expected "<a>test</a><b></b><meta>" but got "<a>test</a><b></b><meta></meta>"
    164 FAIL innerHTML void as last child with preceding siblings param assert_equals: expected "<a>test</a><b></b><param>" but got "<a>test</a><b></b><param></param>"
    165 FAIL innerHTML void as last child with preceding siblings source assert_equals: expected "<a>test</a><b></b><source>" but got "<a>test</a><b></b><source></source>"
    166 FAIL innerHTML void as last child with preceding siblings track assert_equals: expected "<a>test</a><b></b><track>" but got "<a>test</a><b></b><track></track>"
    167 FAIL innerHTML void as last child with preceding siblings wbr assert_equals: expected "<a>test</a><b></b><wbr>" but got "<a>test</a><b></b><wbr></wbr>"
    168 FAIL outerHTML Void context node area assert_equals: expected "<area>" but got "<area></area>"
    169 FAIL outerHTML Void context node base assert_equals: expected "<base>" but got "<base></base>"
    170 FAIL outerHTML Void context node basefont assert_equals: expected "<basefont>" but got "<basefont></basefont>"
    171 FAIL outerHTML Void context node bgsound assert_equals: expected "<bgsound>" but got "<bgsound></bgsound>"
    172 FAIL outerHTML Void context node br assert_equals: expected "<br>" but got "<br></br>"
    173 FAIL outerHTML Void context node col assert_equals: expected "<col>" but got "<col></col>"
    174 FAIL outerHTML Void context node embed assert_equals: expected "<embed>" but got "<embed></embed>"
    175 FAIL outerHTML Void context node frame assert_equals: expected "<frame>" but got "<frame></frame>"
    176 FAIL outerHTML Void context node hr assert_equals: expected "<hr>" but got "<hr></hr>"
    177 FAIL outerHTML Void context node img assert_equals: expected "<img>" but got "<img></img>"
    178 FAIL outerHTML Void context node input assert_equals: expected "<input>" but got "<input></input>"
    179 FAIL outerHTML Void context node keygen assert_equals: expected "<keygen>" but got "<keygen></keygen>"
    180 FAIL outerHTML Void context node link assert_equals: expected "<link>" but got "<link></link>"
     163PASS innerHTML void as last child with preceding siblings meta
     164PASS innerHTML void as last child with preceding siblings param
     165PASS innerHTML void as last child with preceding siblings source
     166PASS innerHTML void as last child with preceding siblings track
     167PASS innerHTML void as last child with preceding siblings wbr
     168PASS outerHTML Void context node area
     169PASS outerHTML Void context node base
     170PASS outerHTML Void context node basefont
     171PASS outerHTML Void context node bgsound
     172PASS outerHTML Void context node br
     173PASS outerHTML Void context node col
     174PASS outerHTML Void context node embed
     175PASS outerHTML Void context node frame
     176PASS outerHTML Void context node hr
     177PASS outerHTML Void context node img
     178PASS outerHTML Void context node input
     179PASS outerHTML Void context node keygen
     180PASS outerHTML Void context node link
    181181FAIL outerHTML Void context node menuitem assert_equals: expected "<menuitem>" but got "<menuitem><a><!--abc--></a><b><c>abc</c></b></menuitem>"
    182 FAIL outerHTML Void context node meta assert_equals: expected "<meta>" but got "<meta></meta>"
    183 FAIL outerHTML Void context node param assert_equals: expected "<param>" but got "<param></param>"
    184 FAIL outerHTML Void context node source assert_equals: expected "<source>" but got "<source></source>"
    185 FAIL outerHTML Void context node track assert_equals: expected "<track>" but got "<track></track>"
    186 FAIL outerHTML Void context node wbr assert_equals: expected "<wbr>" but got "<wbr></wbr>"
    187 FAIL outerHTML void as first child with following siblings area assert_equals: expected "<span><area><a>test</a><b></b></span>" but got "<span><area></area><a>test</a><b></b></span>"
    188 FAIL outerHTML void as first child with following siblings base assert_equals: expected "<span><base><a>test</a><b></b></span>" but got "<span><base></base><a>test</a><b></b></span>"
    189 FAIL outerHTML void as first child with following siblings basefont assert_equals: expected "<span><basefont><a>test</a><b></b></span>" but got "<span><basefont></basefont><a>test</a><b></b></span>"
    190 FAIL outerHTML void as first child with following siblings bgsound assert_equals: expected "<span><bgsound><a>test</a><b></b></span>" but got "<span><bgsound></bgsound><a>test</a><b></b></span>"
    191 FAIL outerHTML void as first child with following siblings br assert_equals: expected "<span><br><a>test</a><b></b></span>" but got "<span><br></br><a>test</a><b></b></span>"
    192 FAIL outerHTML void as first child with following siblings col assert_equals: expected "<span><col><a>test</a><b></b></span>" but got "<span><col></col><a>test</a><b></b></span>"
    193 FAIL outerHTML void as first child with following siblings embed assert_equals: expected "<span><embed><a>test</a><b></b></span>" but got "<span><embed></embed><a>test</a><b></b></span>"
    194 FAIL outerHTML void as first child with following siblings frame assert_equals: expected "<span><frame><a>test</a><b></b></span>" but got "<span><frame></frame><a>test</a><b></b></span>"
    195 FAIL outerHTML void as first child with following siblings hr assert_equals: expected "<span><hr><a>test</a><b></b></span>" but got "<span><hr></hr><a>test</a><b></b></span>"
    196 FAIL outerHTML void as first child with following siblings img assert_equals: expected "<span><img><a>test</a><b></b></span>" but got "<span><img></img><a>test</a><b></b></span>"
    197 FAIL outerHTML void as first child with following siblings input assert_equals: expected "<span><input><a>test</a><b></b></span>" but got "<span><input></input><a>test</a><b></b></span>"
    198 FAIL outerHTML void as first child with following siblings keygen assert_equals: expected "<span><keygen><a>test</a><b></b></span>" but got "<span><keygen></keygen><a>test</a><b></b></span>"
    199 FAIL outerHTML void as first child with following siblings link assert_equals: expected "<span><link><a>test</a><b></b></span>" but got "<span><link></link><a>test</a><b></b></span>"
     182PASS outerHTML Void context node meta
     183PASS outerHTML Void context node param
     184PASS outerHTML Void context node source
     185PASS outerHTML Void context node track
     186PASS outerHTML Void context node wbr
     187PASS outerHTML void as first child with following siblings area
     188PASS outerHTML void as first child with following siblings base
     189PASS outerHTML void as first child with following siblings basefont
     190PASS outerHTML void as first child with following siblings bgsound
     191PASS outerHTML void as first child with following siblings br
     192PASS outerHTML void as first child with following siblings col
     193PASS outerHTML void as first child with following siblings embed
     194PASS outerHTML void as first child with following siblings frame
     195PASS outerHTML void as first child with following siblings hr
     196PASS outerHTML void as first child with following siblings img
     197PASS outerHTML void as first child with following siblings input
     198PASS outerHTML void as first child with following siblings keygen
     199PASS outerHTML void as first child with following siblings link
    200200FAIL outerHTML void as first child with following siblings menuitem assert_equals: expected "<span><menuitem><a>test</a><b></b></span>" but got "<span><menuitem><a><!--abc--></a><b><c>abc</c></b></menuitem><a>test</a><b></b></span>"
    201 FAIL outerHTML void as first child with following siblings meta assert_equals: expected "<span><meta><a>test</a><b></b></span>" but got "<span><meta></meta><a>test</a><b></b></span>"
    202 FAIL outerHTML void as first child with following siblings param assert_equals: expected "<span><param><a>test</a><b></b></span>" but got "<span><param></param><a>test</a><b></b></span>"
    203 FAIL outerHTML void as first child with following siblings source assert_equals: expected "<span><source><a>test</a><b></b></span>" but got "<span><source></source><a>test</a><b></b></span>"
    204 FAIL outerHTML void as first child with following siblings track assert_equals: expected "<span><track><a>test</a><b></b></span>" but got "<span><track></track><a>test</a><b></b></span>"
    205 FAIL outerHTML void as first child with following siblings wbr assert_equals: expected "<span><wbr><a>test</a><b></b></span>" but got "<span><wbr></wbr><a>test</a><b></b></span>"
    206 FAIL outerHTML void as second child with following siblings area assert_equals: expected "<span><a>test</a><area><b></b></span>" but got "<span><a>test</a><area></area><b></b></span>"
    207 FAIL outerHTML void as second child with following siblings base assert_equals: expected "<span><a>test</a><base><b></b></span>" but got "<span><a>test</a><base></base><b></b></span>"
    208 FAIL outerHTML void as second child with following siblings basefont assert_equals: expected "<span><a>test</a><basefont><b></b></span>" but got "<span><a>test</a><basefont></basefont><b></b></span>"
    209 FAIL outerHTML void as second child with following siblings bgsound assert_equals: expected "<span><a>test</a><bgsound><b></b></span>" but got "<span><a>test</a><bgsound></bgsound><b></b></span>"
    210 FAIL outerHTML void as second child with following siblings br assert_equals: expected "<span><a>test</a><br><b></b></span>" but got "<span><a>test</a><br></br><b></b></span>"
    211 FAIL outerHTML void as second child with following siblings col assert_equals: expected "<span><a>test</a><col><b></b></span>" but got "<span><a>test</a><col></col><b></b></span>"
    212 FAIL outerHTML void as second child with following siblings embed assert_equals: expected "<span><a>test</a><embed><b></b></span>" but got "<span><a>test</a><embed></embed><b></b></span>"
    213 FAIL outerHTML void as second child with following siblings frame assert_equals: expected "<span><a>test</a><frame><b></b></span>" but got "<span><a>test</a><frame></frame><b></b></span>"
    214 FAIL outerHTML void as second child with following siblings hr assert_equals: expected "<span><a>test</a><hr><b></b></span>" but got "<span><a>test</a><hr></hr><b></b></span>"
    215 FAIL outerHTML void as second child with following siblings img assert_equals: expected "<span><a>test</a><img><b></b></span>" but got "<span><a>test</a><img></img><b></b></span>"
    216 FAIL outerHTML void as second child with following siblings input assert_equals: expected "<span><a>test</a><input><b></b></span>" but got "<span><a>test</a><input></input><b></b></span>"
    217 FAIL outerHTML void as second child with following siblings keygen assert_equals: expected "<span><a>test</a><keygen><b></b></span>" but got "<span><a>test</a><keygen></keygen><b></b></span>"
    218 FAIL outerHTML void as second child with following siblings link assert_equals: expected "<span><a>test</a><link><b></b></span>" but got "<span><a>test</a><link></link><b></b></span>"
     201PASS outerHTML void as first child with following siblings meta
     202PASS outerHTML void as first child with following siblings param
     203PASS outerHTML void as first child with following siblings source
     204PASS outerHTML void as first child with following siblings track
     205PASS outerHTML void as first child with following siblings wbr
     206PASS outerHTML void as second child with following siblings area
     207PASS outerHTML void as second child with following siblings base
     208PASS outerHTML void as second child with following siblings basefont
     209PASS outerHTML void as second child with following siblings bgsound
     210PASS outerHTML void as second child with following siblings br
     211PASS outerHTML void as second child with following siblings col
     212PASS outerHTML void as second child with following siblings embed
     213PASS outerHTML void as second child with following siblings frame
     214PASS outerHTML void as second child with following siblings hr
     215PASS outerHTML void as second child with following siblings img
     216PASS outerHTML void as second child with following siblings input
     217PASS outerHTML void as second child with following siblings keygen
     218PASS outerHTML void as second child with following siblings link
    219219FAIL outerHTML void as second child with following siblings menuitem assert_equals: expected "<span><a>test</a><menuitem><b></b></span>" but got "<span><a>test</a><menuitem><a><!--abc--></a><b><c>abc</c></b></menuitem><b></b></span>"
    220 FAIL outerHTML void as second child with following siblings meta assert_equals: expected "<span><a>test</a><meta><b></b></span>" but got "<span><a>test</a><meta></meta><b></b></span>"
    221 FAIL outerHTML void as second child with following siblings param assert_equals: expected "<span><a>test</a><param><b></b></span>" but got "<span><a>test</a><param></param><b></b></span>"
    222 FAIL outerHTML void as second child with following siblings source assert_equals: expected "<span><a>test</a><source><b></b></span>" but got "<span><a>test</a><source></source><b></b></span>"
    223 FAIL outerHTML void as second child with following siblings track assert_equals: expected "<span><a>test</a><track><b></b></span>" but got "<span><a>test</a><track></track><b></b></span>"
    224 FAIL outerHTML void as second child with following siblings wbr assert_equals: expected "<span><a>test</a><wbr><b></b></span>" but got "<span><a>test</a><wbr></wbr><b></b></span>"
    225 FAIL outerHTML void as last child with preceding siblings area assert_equals: expected "<span><a>test</a><b></b><area></span>" but got "<span><a>test</a><b></b><area></area></span>"
    226 FAIL outerHTML void as last child with preceding siblings base assert_equals: expected "<span><a>test</a><b></b><base></span>" but got "<span><a>test</a><b></b><base></base></span>"
    227 FAIL outerHTML void as last child with preceding siblings basefont assert_equals: expected "<span><a>test</a><b></b><basefont></span>" but got "<span><a>test</a><b></b><basefont></basefont></span>"
    228 FAIL outerHTML void as last child with preceding siblings bgsound assert_equals: expected "<span><a>test</a><b></b><bgsound></span>" but got "<span><a>test</a><b></b><bgsound></bgsound></span>"
    229 FAIL outerHTML void as last child with preceding siblings br assert_equals: expected "<span><a>test</a><b></b><br></span>" but got "<span><a>test</a><b></b><br></br></span>"
    230 FAIL outerHTML void as last child with preceding siblings col assert_equals: expected "<span><a>test</a><b></b><col></span>" but got "<span><a>test</a><b></b><col></col></span>"
    231 FAIL outerHTML void as last child with preceding siblings embed assert_equals: expected "<span><a>test</a><b></b><embed></span>" but got "<span><a>test</a><b></b><embed></embed></span>"
    232 FAIL outerHTML void as last child with preceding siblings frame assert_equals: expected "<span><a>test</a><b></b><frame></span>" but got "<span><a>test</a><b></b><frame></frame></span>"
    233 FAIL outerHTML void as last child with preceding siblings hr assert_equals: expected "<span><a>test</a><b></b><hr></span>" but got "<span><a>test</a><b></b><hr></hr></span>"
    234 FAIL outerHTML void as last child with preceding siblings img assert_equals: expected "<span><a>test</a><b></b><img></span>" but got "<span><a>test</a><b></b><img></img></span>"
    235 FAIL outerHTML void as last child with preceding siblings input assert_equals: expected "<span><a>test</a><b></b><input></span>" but got "<span><a>test</a><b></b><input></input></span>"
    236 FAIL outerHTML void as last child with preceding siblings keygen assert_equals: expected "<span><a>test</a><b></b><keygen></span>" but got "<span><a>test</a><b></b><keygen></keygen></span>"
    237 FAIL outerHTML void as last child with preceding siblings link assert_equals: expected "<span><a>test</a><b></b><link></span>" but got "<span><a>test</a><b></b><link></link></span>"
     220PASS outerHTML void as second child with following siblings meta
     221PASS outerHTML void as second child with following siblings param
     222PASS outerHTML void as second child with following siblings source
     223PASS outerHTML void as second child with following siblings track
     224PASS outerHTML void as second child with following siblings wbr
     225PASS outerHTML void as last child with preceding siblings area
     226PASS outerHTML void as last child with preceding siblings base
     227PASS outerHTML void as last child with preceding siblings basefont
     228PASS outerHTML void as last child with preceding siblings bgsound
     229PASS outerHTML void as last child with preceding siblings br
     230PASS outerHTML void as last child with preceding siblings col
     231PASS outerHTML void as last child with preceding siblings embed
     232PASS outerHTML void as last child with preceding siblings frame
     233PASS outerHTML void as last child with preceding siblings hr
     234PASS outerHTML void as last child with preceding siblings img
     235PASS outerHTML void as last child with preceding siblings input
     236PASS outerHTML void as last child with preceding siblings keygen
     237PASS outerHTML void as last child with preceding siblings link
    238238FAIL outerHTML void as last child with preceding siblings menuitem assert_equals: expected "<span><a>test</a><b></b><menuitem></span>" but got "<span><a>test</a><b></b><menuitem><a><!--abc--></a><b><c>abc</c></b></menuitem></span>"
    239 FAIL outerHTML void as last child with preceding siblings meta assert_equals: expected "<span><a>test</a><b></b><meta></span>" but got "<span><a>test</a><b></b><meta></meta></span>"
    240 FAIL outerHTML void as last child with preceding siblings param assert_equals: expected "<span><a>test</a><b></b><param></span>" but got "<span><a>test</a><b></b><param></param></span>"
    241 FAIL outerHTML void as last child with preceding siblings source assert_equals: expected "<span><a>test</a><b></b><source></span>" but got "<span><a>test</a><b></b><source></source></span>"
    242 FAIL outerHTML void as last child with preceding siblings track assert_equals: expected "<span><a>test</a><b></b><track></span>" but got "<span><a>test</a><b></b><track></track></span>"
    243 FAIL outerHTML void as last child with preceding siblings wbr assert_equals: expected "<span><a>test</a><b></b><wbr></span>" but got "<span><a>test</a><b></b><wbr></wbr></span>"
     239PASS outerHTML void as last child with preceding siblings meta
     240PASS outerHTML void as last child with preceding siblings param
     241PASS outerHTML void as last child with preceding siblings source
     242PASS outerHTML void as last child with preceding siblings track
     243PASS outerHTML void as last child with preceding siblings wbr
    244244
  • trunk/Source/WebCore/ChangeLog

    r206265 r206266  
     12016-09-22  Chris Dumez  <cdumez@apple.com>
     2
     3        Fix serialization of HTML void elements when they have children
     4        https://bugs.webkit.org/show_bug.cgi?id=162418
     5
     6        Reviewed by Darin Adler.
     7
     8        Fix serialization of HTML void elements when they have children.
     9
     10        Void elements (such as <hr>) cannot have a closing tag. When
     11        encountering them, we would properly not serialize the void
     12        element's children (if it had any). However, we would incorrectly
     13        append an end tag (because the element technically has children).
     14
     15        Relevant specification:
     16        - https://html.spec.whatwg.org/#html-fragment-serialisation-algorithm
     17
     18        In particular, this part:
     19        ""
     20        If current node is an area, base, basefont, bgsound, br, col, embed,
     21        frame, hr, img, input, keygen, link, meta, param, source, track or wbr
     22        element, then continue on to the next child node at this point.
     23        ""
     24
     25        Firefox matches the specification.
     26
     27        No new tests, rebaselined existing test.
     28
     29        * editing/MarkupAccumulator.cpp:
     30        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces):
     31
    1322016-09-22  Don Olmstead  <don.olmstead@am.sony.com>
    233
  • trunk/Source/WebCore/editing/MarkupAccumulator.cpp

    r206246 r206266  
    157157        appendStartTag(targetNode, &namespaceHash);
    158158
    159     if (!(targetNode.document().isHTMLDocument() && elementCannotHaveEndTag(targetNode))) {
    160         Node* current = targetNode.hasTagName(templateTag) ? downcast<HTMLTemplateElement>(targetNode).content().firstChild() : targetNode.firstChild();
    161         for ( ; current; current = current->nextSibling())
    162             serializeNodesWithNamespaces(*current, IncludeNode, &namespaceHash, tagNamesToSkip);
    163     }
     159    if (targetNode.document().isHTMLDocument() && elementCannotHaveEndTag(targetNode))
     160        return;
     161
     162    Node* current = targetNode.hasTagName(templateTag) ? downcast<HTMLTemplateElement>(targetNode).content().firstChild() : targetNode.firstChild();
     163    for ( ; current; current = current->nextSibling())
     164        serializeNodesWithNamespaces(*current, IncludeNode, &namespaceHash, tagNamesToSkip);
    164165
    165166    if (!childrenOnly)
Note: See TracChangeset for help on using the changeset viewer.