Changeset 62926 in webkit
- Timestamp:
- Jul 9, 2010 3:10:57 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r62925 r62926 1 2010-07-09 Eric Seidel <eric@webkit.org> 2 3 Reviewed by Adam Barth. 4 5 Implement self closing start tag state in the tokenizer 6 https://bugs.webkit.org/show_bug.cgi?id=41946 7 8 * html5lib/runner-expected-html5.txt: 9 - Yay progressions! 10 11 2010-07-09 Eric Seidel <eric@webkit.org> 12 13 Reviewed by Adam Barth. 14 15 Add basic "in foreign content" support to the TreeBuilder 16 https://bugs.webkit.org/show_bug.cgi?id=41943 17 18 Update our results now that we pass a bunch more tests. 19 20 * html5lib/runner-expected-html5.txt: 21 1 22 2010-07-09 Nikolas Zimmermann <nzimmermann@rim.com> 2 23 -
trunk/LayoutTests/html5lib/runner-expected-html5.txt
r62924 r62926 964 964 | "bar" 965 965 resources/tests10.dat: 966 1967 2968 5969 6970 7971 8972 9973 10974 11975 12976 966 13 977 967 14 … … 984 974 25 985 975 986 Test 1 of 25 in resources/tests10.dat failed. Input: 987 <!DOCTYPE html><svg></svg> 988 Got: 989 | <!DOCTYPE html> 990 | <html> 991 | <head> 992 | <body> 993 | <svg> 994 Expected: 995 | <!DOCTYPE html> 996 | <html> 997 | <head> 998 | <body> 999 | <svg svg> 1000 1001 Test 2 of 25 in resources/tests10.dat failed. Input: 1002 <!DOCTYPE html><body><svg></svg> 1003 Got: 1004 | <!DOCTYPE html> 1005 | <html> 1006 | <head> 1007 | <body> 1008 | <svg> 1009 Expected: 1010 | <!DOCTYPE html> 1011 | <html> 1012 | <head> 1013 | <body> 1014 | <svg svg> 1015 1016 Test 5 of 25 in resources/tests10.dat failed. Input: 1017 <!DOCTYPE html><body><table><svg></svg></table> 1018 Got: 1019 | <!DOCTYPE html> 1020 | <html> 1021 | <head> 1022 | <body> 1023 | <svg> 1024 | <table> 1025 Expected: 1026 | <!DOCTYPE html> 1027 | <html> 1028 | <head> 1029 | <body> 1030 | <svg svg> 1031 | <table> 1032 1033 Test 6 of 25 in resources/tests10.dat failed. Input: 1034 <!DOCTYPE html><body><table><svg><g>foo</g></svg></table> 1035 Got: 1036 | <!DOCTYPE html> 1037 | <html> 1038 | <head> 1039 | <body> 1040 | <svg> 1041 | <g> 1042 | "foo" 1043 | <table> 1044 Expected: 1045 | <!DOCTYPE html> 1046 | <html> 1047 | <head> 1048 | <body> 1049 | <svg svg> 1050 | <svg g> 1051 | "foo" 1052 | <table> 1053 1054 Test 7 of 25 in resources/tests10.dat failed. Input: 1055 <!DOCTYPE html><body><table><svg><g>foo</g><g>bar</g></svg></table> 1056 Got: 1057 | <!DOCTYPE html> 1058 | <html> 1059 | <head> 1060 | <body> 1061 | <svg> 1062 | <g> 1063 | "foo" 1064 | <g> 1065 | "bar" 1066 | <table> 1067 Expected: 1068 | <!DOCTYPE html> 1069 | <html> 1070 | <head> 1071 | <body> 1072 | <svg svg> 1073 | <svg g> 1074 | "foo" 1075 | <svg g> 1076 | "bar" 1077 | <table> 1078 1079 Test 8 of 25 in resources/tests10.dat failed. Input: 1080 <!DOCTYPE html><body><table><tbody><svg><g>foo</g><g>bar</g></svg></tbody></table> 1081 Got: 1082 | <!DOCTYPE html> 1083 | <html> 1084 | <head> 1085 | <body> 1086 | <svg> 1087 | <g> 1088 | "foo" 1089 | <g> 1090 | "bar" 1091 | <table> 1092 | <tbody> 1093 Expected: 1094 | <!DOCTYPE html> 1095 | <html> 1096 | <head> 1097 | <body> 1098 | <svg svg> 1099 | <svg g> 1100 | "foo" 1101 | <svg g> 1102 | "bar" 1103 | <table> 1104 | <tbody> 1105 1106 Test 9 of 25 in resources/tests10.dat failed. Input: 1107 <!DOCTYPE html><body><table><tbody><tr><svg><g>foo</g><g>bar</g></svg></tr></tbody></table> 1108 Got: 1109 | <!DOCTYPE html> 1110 | <html> 1111 | <head> 1112 | <body> 1113 | <svg> 1114 | <g> 1115 | "foo" 1116 | <g> 1117 | "bar" 1118 | <table> 1119 | <tbody> 1120 | <tr> 1121 Expected: 1122 | <!DOCTYPE html> 1123 | <html> 1124 | <head> 1125 | <body> 1126 | <svg svg> 1127 | <svg g> 1128 | "foo" 1129 | <svg g> 1130 | "bar" 1131 | <table> 1132 | <tbody> 1133 | <tr> 1134 1135 Test 10 of 25 in resources/tests10.dat failed. Input: 1136 <!DOCTYPE html><body><table><tbody><tr><td><svg><g>foo</g><g>bar</g></svg></td></tr></tbody></table> 1137 Got: 1138 | <!DOCTYPE html> 1139 | <html> 1140 | <head> 1141 | <body> 1142 | <table> 1143 | <tbody> 1144 | <tr> 1145 | <td> 1146 | <svg> 1147 | <g> 1148 | "foo" 1149 | <g> 1150 | "bar" 1151 Expected: 1152 | <!DOCTYPE html> 1153 | <html> 1154 | <head> 1155 | <body> 1156 | <table> 1157 | <tbody> 1158 | <tr> 1159 | <td> 1160 | <svg svg> 1161 | <svg g> 1162 | "foo" 1163 | <svg g> 1164 | "bar" 1165 1166 Test 11 of 25 in resources/tests10.dat failed. Input: 1167 <!DOCTYPE html><body><table><tbody><tr><td><svg><g>foo</g><g>bar</g></svg><p>baz</td></tr></tbody></table> 1168 Got: 1169 | <!DOCTYPE html> 1170 | <html> 1171 | <head> 1172 | <body> 1173 | <table> 1174 | <tbody> 1175 | <tr> 1176 | <td> 1177 | <svg> 1178 | <g> 1179 | "foo" 1180 | <g> 1181 | "bar" 1182 | <p> 1183 | "baz" 1184 Expected: 1185 | <!DOCTYPE html> 1186 | <html> 1187 | <head> 1188 | <body> 1189 | <table> 1190 | <tbody> 1191 | <tr> 1192 | <td> 1193 | <svg svg> 1194 | <svg g> 1195 | "foo" 1196 | <svg g> 1197 | "bar" 1198 | <p> 1199 | "baz" 1200 1201 Test 12 of 25 in resources/tests10.dat failed. Input: 1202 <!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g></svg><p>baz</caption></table> 1203 Got: 1204 | <!DOCTYPE html> 1205 | <html> 1206 | <head> 1207 | <body> 1208 | <table> 1209 | <caption> 1210 | <svg> 1211 | <g> 1212 | "foo" 1213 | <g> 1214 | "bar" 1215 | <p> 1216 | "baz" 1217 Expected: 976 Test 13 of 25 in resources/tests10.dat failed. Input: 977 <!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g><p>baz</table><p>quux 978 Got: 1218 979 | <!DOCTYPE html> 1219 980 | <html> … … 1227 988 | <svg g> 1228 989 | "bar" 1229 | <p> 1230 | "baz" 1231 1232 Test 13 of 25 in resources/tests10.dat failed. Input: 1233 <!DOCTYPE html><body><table><caption><svg><g>foo</g><g>bar</g><p>baz</table><p>quux 1234 Got: 1235 | <!DOCTYPE html> 1236 | <html> 1237 | <head> 1238 | <body> 1239 | <table> 1240 | <caption> 1241 | <svg> 1242 | <g> 1243 | "foo" 1244 | <g> 1245 | "bar" 1246 | <p> 990 | <svg p> 1247 991 | "baz" 1248 | <p>1249 | "quux"992 | <svg p> 993 | "quux" 1250 994 Expected: 1251 995 | <!DOCTYPE html> … … 1274 1018 | <table> 1275 1019 | <caption> 1276 | <svg >1277 | < g>1020 | <svg svg> 1021 | <svg g> 1278 1022 | "foo" 1279 | < g>1023 | <svg g> 1280 1024 | "bar" 1281 1025 | "baz" 1282 | <p>1283 | "quux"1026 | <svg p> 1027 | "quux" 1284 1028 Expected: 1285 1029 | <!DOCTYPE html> … … 1305 1049 | <head> 1306 1050 | <body> 1307 | <svg >1308 | < g>1051 | <svg svg> 1052 | <svg g> 1309 1053 | "foo" 1310 | < g>1054 | <svg g> 1311 1055 | "bar" 1312 | < p>1056 | <svg p> 1313 1057 | "baz" 1058 | <svg p> 1059 | "quux" 1314 1060 | <table> 1315 1061 | <colgroup> 1316 | <p>1317 | "quux"1318 1062 Expected: 1319 1063 | <!DOCTYPE html> … … 1340 1084 | <head> 1341 1085 | <body> 1342 | <svg >1343 | < g>1086 | <svg svg> 1087 | <svg g> 1344 1088 | "foo" 1345 | < g>1089 | <svg g> 1346 1090 | "bar" 1347 | < p>1091 | <svg p> 1348 1092 | "baz" 1349 1093 Expected: … … 1367 1111 | <head> 1368 1112 | <body> 1369 | <svg >1370 | < g>1113 | <svg svg> 1114 | <svg g> 1371 1115 | "foo" 1372 | < g>1116 | <svg g> 1373 1117 | "bar" 1374 | < p>1118 | <svg p> 1375 1119 | "baz" 1376 1120 Expected: … … 1395 1139 | <body> 1396 1140 | xlink:href="foo" 1397 | <svg >1141 | <svg svg> 1398 1142 | xlink:href="foo" 1399 1143 Expected: … … 1415 1159 | xlink:href="foo" 1416 1160 | xml:lang="en" 1417 | <svg >1418 | < g>1161 | <svg svg> 1162 | <svg g> 1419 1163 | xlink:href="foo" 1420 1164 | xml:lang="en" … … 1440 1184 | xlink:href="foo" 1441 1185 | xml:lang="en" 1442 | <svg >1443 | < g>1186 | <svg svg> 1187 | <svg g> 1444 1188 | xlink:href="foo" 1445 1189 | xml:lang="en" … … 1465 1209 | xlink:href="foo" 1466 1210 | xml:lang="en" 1467 | <svg >1468 | < g>1211 | <svg svg> 1212 | <svg g> 1469 1213 | xlink:href="foo" 1470 1214 | xml:lang="en" 1471 | 1215 | "bar" 1472 1216 Expected: 1473 1217 | <!DOCTYPE html> … … 1491 1235 7 1492 1236 8 1493 91494 1237 1495 1238 Test 1 of 9 in resources/tests11.dat failed. Input: … … 1500 1243 | <head> 1501 1244 | <body> 1502 | <svg >1245 | <svg svg> 1503 1246 | attributename="" 1504 1247 | attributetype="" … … 1639 1382 | <head> 1640 1383 | <body> 1641 | <svg >1384 | <svg svg> 1642 1385 | attributename="" 1643 1386 | attributetype="" … … 1778 1521 | <head> 1779 1522 | <body> 1780 | <svg >1523 | <svg svg> 1781 1524 | attributename="" 1782 1525 | attributetype="" … … 2056 1799 | <head> 2057 1800 | <body> 2058 | <svg >2059 | < altglyph>2060 | <altglyphdef>2061 | <altglyphitem>2062 | <animatecolor>2063 | <animatemotion>2064 | <animatetransform>2065 | <clippath>2066 | <feblend>2067 | <fecolormatrix>2068 | <fecomponenttransfer>2069 | <fecomposite>2070 | <feconvolvematrix>2071 | <fediffuselighting>2072 | <fedisplacementmap>2073 | <fedistantlight>2074 | <feflood>2075 | <fefunca>2076 | <fefuncb>2077 | <fefuncg>2078 | <fefuncr>2079 | <fegaussianblur>2080 | <feimage>2081 | <femerge>2082 | <femergenode>2083 | <femorphology>2084 | <feoffset>2085 | <fepointlight>2086 | <fespecularlighting>2087 | <fespotlight>2088 | <fetile>2089 | <feturbulence>2090 | <foreignobject>2091 | <glyphref>2092 | <lineargradient>2093 | <radialgradient>2094 | <textpath>1801 | <svg svg> 1802 | <svg altglyph> 1803 | <svg altglyphdef> 1804 | <svg altglyphitem> 1805 | <svg animatecolor> 1806 | <svg animatemotion> 1807 | <svg animatetransform> 1808 | <svg clippath> 1809 | <svg feblend> 1810 | <svg fecolormatrix> 1811 | <svg fecomponenttransfer> 1812 | <svg fecomposite> 1813 | <svg feconvolvematrix> 1814 | <svg fediffuselighting> 1815 | <svg fedisplacementmap> 1816 | <svg fedistantlight> 1817 | <svg feflood> 1818 | <svg fefunca> 1819 | <svg fefuncb> 1820 | <svg fefuncg> 1821 | <svg fefuncr> 1822 | <svg fegaussianblur> 1823 | <svg feimage> 1824 | <svg femerge> 1825 | <svg femergenode> 1826 | <svg femorphology> 1827 | <svg feoffset> 1828 | <svg fepointlight> 1829 | <svg fespecularlighting> 1830 | <svg fespotlight> 1831 | <svg fetile> 1832 | <svg feturbulence> 1833 | <svg foreignobject> 1834 | <svg glyphref> 1835 | <svg lineargradient> 1836 | <svg radialgradient> 1837 | <svg textpath> 2095 1838 Expected: 2096 1839 | <!DOCTYPE html> … … 2143 1886 | <head> 2144 1887 | <body> 2145 | <svg >2146 | < altglyph>2147 | <altglyphdef>2148 | <altglyphitem>2149 | <animatecolor>2150 | <animatemotion>2151 | <animatetransform>2152 | <clippath>2153 | <feblend>2154 | <fecolormatrix>2155 | <fecomponenttransfer>2156 | <fecomposite>2157 | <feconvolvematrix>2158 | <fediffuselighting>2159 | <fedisplacementmap>2160 | <fedistantlight>2161 | <feflood>2162 | <fefunca>2163 | <fefuncb>2164 | <fefuncg>2165 | <fefuncr>2166 | <fegaussianblur>2167 | <feimage>2168 | <femerge>2169 | <femergenode>2170 | <femorphology>2171 | <feoffset>2172 | <fepointlight>2173 | <fespecularlighting>2174 | <fespotlight>2175 | <fetile>2176 | <feturbulence>2177 | <foreignobject>2178 | <glyphref>2179 | <lineargradient>2180 | <radialgradient>2181 | <textpath>1888 | <svg svg> 1889 | <svg altglyph> 1890 | <svg altglyphdef> 1891 | <svg altglyphitem> 1892 | <svg animatecolor> 1893 | <svg animatemotion> 1894 | <svg animatetransform> 1895 | <svg clippath> 1896 | <svg feblend> 1897 | <svg fecolormatrix> 1898 | <svg fecomponenttransfer> 1899 | <svg fecomposite> 1900 | <svg feconvolvematrix> 1901 | <svg fediffuselighting> 1902 | <svg fedisplacementmap> 1903 | <svg fedistantlight> 1904 | <svg feflood> 1905 | <svg fefunca> 1906 | <svg fefuncb> 1907 | <svg fefuncg> 1908 | <svg fefuncr> 1909 | <svg fegaussianblur> 1910 | <svg feimage> 1911 | <svg femerge> 1912 | <svg femergenode> 1913 | <svg femorphology> 1914 | <svg feoffset> 1915 | <svg fepointlight> 1916 | <svg fespecularlighting> 1917 | <svg fespotlight> 1918 | <svg fetile> 1919 | <svg feturbulence> 1920 | <svg foreignobject> 1921 | <svg glyphref> 1922 | <svg lineargradient> 1923 | <svg radialgradient> 1924 | <svg textpath> 2182 1925 Expected: 2183 1926 | <!DOCTYPE html> … … 2230 1973 | <head> 2231 1974 | <body> 2232 | <svg >2233 | < altglyph>2234 | <altglyphdef>2235 | <altglyphitem>2236 | <animatecolor>2237 | <animatemotion>2238 | <animatetransform>2239 | <clippath>2240 | <feblend>2241 | <fecolormatrix>2242 | <fecomponenttransfer>2243 | <fecomposite>2244 | <feconvolvematrix>2245 | <fediffuselighting>2246 | <fedisplacementmap>2247 | <fedistantlight>2248 | <feflood>2249 | <fefunca>2250 | <fefuncb>2251 | <fefuncg>2252 | <fefuncr>2253 | <fegaussianblur>2254 | <feimage>2255 | <femerge>2256 | <femergenode>2257 | <femorphology>2258 | <feoffset>2259 | <fepointlight>2260 | <fespecularlighting>2261 | <fespotlight>2262 | <fetile>2263 | <feturbulence>2264 | <foreignobject>2265 | <glyphref>2266 | <lineargradient>2267 | <radialgradient>2268 | <textpath>1975 | <svg svg> 1976 | <svg altglyph> 1977 | <svg altglyphdef> 1978 | <svg altglyphitem> 1979 | <svg animatecolor> 1980 | <svg animatemotion> 1981 | <svg animatetransform> 1982 | <svg clippath> 1983 | <svg feblend> 1984 | <svg fecolormatrix> 1985 | <svg fecomponenttransfer> 1986 | <svg fecomposite> 1987 | <svg feconvolvematrix> 1988 | <svg fediffuselighting> 1989 | <svg fedisplacementmap> 1990 | <svg fedistantlight> 1991 | <svg feflood> 1992 | <svg fefunca> 1993 | <svg fefuncb> 1994 | <svg fefuncg> 1995 | <svg fefuncr> 1996 | <svg fegaussianblur> 1997 | <svg feimage> 1998 | <svg femerge> 1999 | <svg femergenode> 2000 | <svg femorphology> 2001 | <svg feoffset> 2002 | <svg fepointlight> 2003 | <svg fespecularlighting> 2004 | <svg fespotlight> 2005 | <svg fetile> 2006 | <svg feturbulence> 2007 | <svg foreignobject> 2008 | <svg glyphref> 2009 | <svg lineargradient> 2010 | <svg radialgradient> 2011 | <svg textpath> 2269 2012 Expected: 2270 2013 | <!DOCTYPE html> … … 2396 2139 | <math radialgradient> 2397 2140 | <math textpath> 2398 2399 Test 9 of 9 in resources/tests11.dat failed. Input:2400 <!DOCTYPE html><body><svg><solidColor /></svg>2401 Got:2402 | <!DOCTYPE html>2403 | <html>2404 | <head>2405 | <body>2406 | <svg>2407 | <solidcolor>2408 Expected:2409 | <!DOCTYPE html>2410 | <html>2411 | <head>2412 | <body>2413 | <svg svg>2414 | <svg solidcolor>2415 2141 resources/tests12.dat: 2416 2142 1 … … 2431 2157 | "baz" 2432 2158 | <annotation-xml> 2433 | <svg >2434 | < desc>2435 | < b>2159 | <svg svg> 2160 | <svg desc> 2161 | <svg b> 2436 2162 | "eggs" 2437 | <g> 2438 | <foreignobject> 2439 | <p> 2440 | "spam" 2441 | <table> 2442 | <tbody> 2443 | <tr> 2444 | <td> 2445 | <img> 2446 | <g> 2447 | "quux" 2448 | "bar" 2163 | <svg g> 2164 | <svg foreignobject> 2165 | <svg p> 2166 | "spam" 2167 | <svg table> 2168 | <svg tr> 2169 | <svg td> 2170 | <svg img> 2171 | <svg g> 2172 | "quux" 2173 | "bar" 2449 2174 Expected: 2450 2175 | <!DOCTYPE html> … … 2489 2214 | "baz" 2490 2215 | <annotation-xml> 2491 | <svg >2492 | < desc>2493 | < b>2216 | <svg svg> 2217 | <svg desc> 2218 | <svg b> 2494 2219 | "eggs" 2495 | < g>2496 | < foreignobject>2497 | < p>2220 | <svg g> 2221 | <svg foreignobject> 2222 | <svg p> 2498 2223 | "spam" 2499 | <table> 2500 | <tbody> 2501 | <tr> 2502 | <td> 2503 | <img> 2504 | <g> 2505 | "quux" 2506 | "bar" 2224 | <svg table> 2225 | <svg tr> 2226 | <svg td> 2227 | <svg img> 2228 | <svg g> 2229 | "quux" 2230 | "bar" 2507 2231 Expected: 2508 2232 | <!DOCTYPE html> -
trunk/WebCore/ChangeLog
r62924 r62926 1 2010-07-09 Eric Seidel <eric@webkit.org> 2 3 Reviewed by Adam Barth. 4 5 Implement self closing start tag state in the tokenizer 6 https://bugs.webkit.org/show_bug.cgi?id=41946 7 8 Amazingly we got this far w/o needing self closing. 9 The LegacyHTMLTreeBuilder clearly uses the self-closing 10 state, but the fact that we never exposed it seems to 11 not have caused any test failures. Sad. 12 13 The new HTMLTreeBuilder only needs the self closing state 14 for foreign content mode (and a few parse error cases). 15 16 * html/HTMLToken.h: 17 (WebCore::HTMLToken::setSelfClosing): 18 * html/HTMLTokenizer.cpp: 19 (WebCore::HTMLTokenizer::nextToken): 20 * html/HTMLTreeBuilder.cpp: 21 (WebCore::): 22 23 2010-07-09 Eric Seidel <eric@webkit.org> 24 25 Reviewed by Adam Barth. 26 27 Add basic "in foreign content" support to the TreeBuilder 28 https://bugs.webkit.org/show_bug.cgi?id=41943 29 30 This is covered by numerous tests in html5lib/runner.html. 31 32 "in foreign content" mode requires us to be able to process 33 tokens using the "secondary insertion mode". We have to set 34 a fake insertion mode to do that, so much of this code is enabling 35 setting of fake insertion modes, and then later restoration of the 36 insertion mode after execution. 37 38 There is a lot more of foreign content mode to implement, but this is 39 a good start resulting in huge test progressions. 40 41 * html/HTMLConstructionSite.cpp: 42 (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement): 43 - Use createHTMLElementAndAttachToCurrent instead of copy/paste code. 44 - No need to include HTMLElementFactory in this file. 45 * html/HTMLConstructionSite.h: 46 - RedirectToFosterParentGuard does not need to be a friend class. 47 * html/HTMLElementStack.cpp: 48 (WebCore::HTMLElementStack::isOnlyHTMLElementsInScope): 49 * html/HTMLElementStack.h: 50 * html/HTMLTreeBuilder.cpp: 51 (WebCore::HTMLTreeBuilder::processStartTagForInBody): 52 (WebCore::): 53 * html/HTMLTreeBuilder.h: 54 (WebCore::HTMLTreeBuilder::setInsertionMode): 55 (WebCore::HTMLTreeBuilder::isFakeInsertionMode): 56 (WebCore::HTMLTreeBuilder::setFakeInsertionMode): 57 1 58 2010-07-09 Adam Barth <abarth@webkit.org> 2 59 -
trunk/WebCore/html/HTMLConstructionSite.cpp
r62924 r62926 33 33 #include "Frame.h" 34 34 #include "HTMLDocument.h" 35 #include "HTMLElementFactory.h"36 35 #include "HTMLHtmlElement.h" 37 36 #include "HTMLNames.h" … … 216 215 { 217 216 ASSERT(token.type() == HTMLToken::StartTag); 218 attach(currentElement(), createHTMLElement(token));217 createHTMLElementAndAttachToCurrent(token); 219 218 // FIXME: Do we want to acknowledge the token's self-closing flag? 220 219 // http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html#acknowledge-self-closing-flag -
trunk/WebCore/html/HTMLConstructionSite.h
r62924 r62926 107 107 108 108 private: 109 friend class RedirectToFosterParentGuard;110 111 109 struct AttachmentSite { 112 110 Node* parent; -
trunk/WebCore/html/HTMLElementStack.cpp
r62909 r62926 334 334 } 335 335 336 bool HTMLElementStack::hasOnlyHTMLElementsInScope() const 337 { 338 for (ElementRecord* record = m_top.get(); record; record = record->next()) { 339 Element* element = record->element(); 340 if (element->namespaceURI() != xhtmlNamespaceURI) 341 return false; 342 if (isScopeMarker(element)) 343 return true; 344 } 345 ASSERT_NOT_REACHED(); // <html> is always on the stack and is a scope marker. 346 return true; 347 } 348 336 349 bool HTMLElementStack::inScope(Element* targetElement) const 337 350 { -
trunk/WebCore/html/HTMLElementStack.h
r62909 r62926 106 106 bool inTableScope(const QualifiedName&) const; 107 107 108 bool hasOnlyHTMLElementsInScope() const; 109 108 110 Element* htmlElement() const; 109 111 Element* headElement() const; -
trunk/WebCore/html/HTMLToken.h
r62551 r62926 175 175 } 176 176 177 void setSelfClosing() 178 { 179 ASSERT(m_type == HTMLToken::StartTag || m_type == HTMLToken::EndTag); 180 m_selfClosing = true; 181 } 182 177 183 const AttributeList& attributes() const 178 184 { -
trunk/WebCore/html/HTMLTokenizer.cpp
r62378 r62926 1046 1046 BEGIN_STATE(SelfClosingStartTagState) { 1047 1047 if (cc == '>') { 1048 notImplemented();1048 m_token->setSelfClosing(); 1049 1049 return emitAndResumeIn(source, DataState); 1050 1050 } else if (cc == InputStreamPreprocessor::endOfFileMarker) { -
trunk/WebCore/html/HTMLTreeBuilder.cpp
r62919 r62926 656 656 } 657 657 658 namespace { 659 660 #if ENABLE(SVG) 661 void adjustSVGAttributes(AtomicHTMLToken&) 662 { 663 notImplemented(); 664 } 665 #endif 666 667 #if ENABLE(MATHML) 668 void adjustMathMLAttributes(AtomicHTMLToken&) 669 { 670 notImplemented(); 671 } 672 #endif 673 674 void adjustForeignAttributes(AtomicHTMLToken&) 675 { 676 notImplemented(); 677 } 678 679 } 680 658 681 void HTMLTreeBuilder::processStartTagForInBody(AtomicHTMLToken& token) 659 682 { … … 915 938 return; 916 939 } 917 if (token.name() == "math") { 918 // This is the MathML foreign content branch point. 919 notImplemented(); 920 } 921 if (token.name() == "svg") { 922 // This is the SVG foreign content branch point. 923 notImplemented(); 924 } 940 // FIXME: These should not need #if guards. 941 #if ENABLE(MATHML) 942 if (token.name() == MathMLNames::mathTag.localName()) { 943 m_tree.reconstructTheActiveFormattingElements(); 944 adjustMathMLAttributes(token); 945 adjustForeignAttributes(token); 946 m_tree.insertForeignElement(token, MathMLNames::mathMLNamespaceURI); 947 if (m_insertionMode != InForeignContentMode) { 948 setSecondaryInsertionMode(m_insertionMode)); 949 setInsertionMode(InForeignContentMode); 950 } 951 return; 952 } 953 #endif 954 #if ENABLE(SVG) 955 if (token.name() == SVGNames::svgTag.localName()) { 956 m_tree.reconstructTheActiveFormattingElements(); 957 adjustSVGAttributes(token); 958 adjustForeignAttributes(token); 959 m_tree.insertForeignElement(token, SVGNames::svgNamespaceURI); 960 if (m_insertionMode != InForeignContentMode) { 961 setSecondaryInsertionMode(m_insertionMode); 962 setInsertionMode(InForeignContentMode); 963 } 964 return; 965 } 966 #endif 925 967 if (isCaptionColOrColgroupTag(token.name()) 926 968 || token.name() == frameTag … … 1344 1386 processStartTag(token); 1345 1387 break; 1388 case InForeignContentMode: { 1389 // FIXME: We're missing a bunch of if branches here. 1390 notImplemented(); 1391 const AtomicString& currentNamespace = m_tree.currentElement()->namespaceURI(); 1392 #if ENABLE(MATHML) 1393 if (currentNamespace == MathMLNames::mathMLNamespaceURI) 1394 adjustMathMLAttributes(token); 1395 #endif 1396 #if ENABLE(SVG) 1397 if (currentNamespace == SVGNames::svgNamespaceURI) 1398 adjustSVGAttributes(token); 1399 #endif 1400 adjustForeignAttributes(token); 1401 m_tree.insertForeignElement(token, currentNamespace); 1402 break; 1403 } 1346 1404 case TextMode: 1347 case InForeignContentMode:1348 1405 notImplemented(); 1349 1406 break; … … 1522 1579 } 1523 1580 1581 void HTMLTreeBuilder::setSecondaryInsertionMode(InsertionMode mode) 1582 { 1583 ASSERT(mode != InForeignContentMode); 1584 m_secondaryInsertionMode = mode; 1585 } 1586 1524 1587 void HTMLTreeBuilder::setInsertionModeAndEnd(InsertionMode newInsertionMode, bool foreign) 1525 1588 { 1526 1589 setInsertionMode(newInsertionMode); 1527 1590 if (foreign) { 1528 m_secondaryInsertionMode = m_insertionMode;1591 setSecondaryInsertionMode(m_insertionMode); 1529 1592 setInsertionMode(InForeignContentMode); 1530 1593 } … … 2128 2191 break; 2129 2192 case InForeignContentMode: 2130 notImplemented(); 2131 break; 2132 } 2193 #if ENABLE(SVG) 2194 if (token.name() == SVGNames::scriptTag && m_tree.currentElement()->hasTagName(SVGNames::scriptTag)) { 2195 notImplemented(); 2196 return; 2197 } 2198 #endif 2199 if (m_tree.currentElement()->namespaceURI() != xhtmlNamespaceURI) { 2200 // FIXME: This code just wants an Element* iterator, instead of an ElementRecord* 2201 HTMLElementStack::ElementRecord* nodeRecord = m_tree.openElements()->topRecord(); 2202 if (!nodeRecord->element()->hasLocalName(token.name())) { 2203 parseError(token); 2204 // FIXME: This return is not in the spec but appears to be needed. 2205 // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10118 2206 return; 2207 } 2208 while (1) { 2209 if (nodeRecord->element()->hasLocalName(token.name())) { 2210 m_tree.openElements()->popUntilPopped(nodeRecord->element()); 2211 return; 2212 } 2213 nodeRecord = nodeRecord->next(); 2214 if (nodeRecord->element()->namespaceURI() == xhtmlNamespaceURI) 2215 processEndTagUsingSecondaryInsertionModeAndAdjustInsertionMode(token); 2216 } 2217 return; 2218 } 2219 processEndTagUsingSecondaryInsertionModeAndAdjustInsertionMode(token); 2220 break; 2221 } 2222 } 2223 2224 class HTMLTreeBuilder::FakeInsertionMode : public Noncopyable { 2225 public: 2226 FakeInsertionMode(HTMLTreeBuilder* treeBuilder, InsertionMode mode) 2227 : m_treeBuilder(treeBuilder) 2228 , m_originalMode(treeBuilder->insertionMode()) 2229 { 2230 m_treeBuilder->setFakeInsertionMode(mode); 2231 } 2232 2233 ~FakeInsertionMode() 2234 { 2235 if (m_treeBuilder->isFakeInsertionMode()) 2236 m_treeBuilder->setInsertionMode(m_originalMode); 2237 } 2238 2239 private: 2240 HTMLTreeBuilder* m_treeBuilder; 2241 InsertionMode m_originalMode; 2242 }; 2243 2244 // This handles both secondary insertion mode processing, as well as updating 2245 // the insertion mode. These are separate steps in the spec, but always occur 2246 // right after one another. 2247 void HTMLTreeBuilder::processEndTagUsingSecondaryInsertionModeAndAdjustInsertionMode(AtomicHTMLToken& token) 2248 { 2249 { 2250 FakeInsertionMode fakeMode(this, m_secondaryInsertionMode); 2251 processEndTag(token); 2252 } 2253 if (insertionMode() == InForeignContentMode && m_tree.openElements()->hasOnlyHTMLElementsInScope()) 2254 setInsertionMode(m_secondaryInsertionMode); 2133 2255 } 2134 2256 … … 2289 2411 } 2290 2412 case InForeignContentMode: { 2291 notImplemented(); 2413 ASSERT(insertionMode() == InForeignContentMode); 2414 String characters = buffer.takeRemaining(); 2415 m_tree.insertTextNode(characters); 2416 if (m_framesetOk && hasNonWhitespace(characters)) 2417 m_framesetOk = false; 2292 2418 break; 2293 2419 } … … 2368 2494 processEndOfFile(token); 2369 2495 break; 2496 case InForeignContentMode: 2497 parseError(token); 2498 // FIXME: Following the spec would infinitely recurse on <svg><svg> 2499 // http://www.w3.org/Bugs/Public/show_bug.cgi?id=10115 2500 while (m_tree.currentElement()) { 2501 if (m_tree.currentElement()->namespaceURI() == xhtmlNamespaceURI) 2502 break; 2503 m_tree.openElements()->pop(); 2504 } 2505 setInsertionMode(m_secondaryInsertionMode); 2506 processEndOfFile(token); 2507 break; 2370 2508 case InTableTextMode: 2371 2509 processDefaultForInTableTextMode(token); … … 2375 2513 case InCaptionMode: 2376 2514 case InRowMode: 2377 case InForeignContentMode:2378 2515 notImplemented(); 2379 2516 break; -
trunk/WebCore/html/HTMLTreeBuilder.h
r62919 r62926 76 76 77 77 private: 78 class FakeInsertionMode; 78 79 // Represents HTML5 "insertion mode" 79 80 // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#insertion-mode … … 153 154 void processDefaultForInTableTextMode(AtomicHTMLToken&); 154 155 156 void processEndTagUsingSecondaryInsertionModeAndAdjustInsertionMode(AtomicHTMLToken&); 157 155 158 PassRefPtr<NamedNodeMap> attributesForIsindexInput(AtomicHTMLToken&); 156 159 … … 172 175 void handleScriptEndTag(Element*, int scriptStartLine); 173 176 174 void setInsertionMode(InsertionMode value) { m_insertionMode = value; }175 177 InsertionMode insertionMode() const { return m_insertionMode; } 178 void setInsertionMode(InsertionMode mode) 179 { 180 m_insertionMode = mode; 181 m_isFakeInsertionMode = false; 182 } 183 184 bool isFakeInsertionMode() { return m_isFakeInsertionMode; } 185 void setFakeInsertionMode(InsertionMode mode) 186 { 187 m_insertionMode = mode; 188 m_isFakeInsertionMode = true; 189 } 190 191 void setSecondaryInsertionMode(InsertionMode); 176 192 177 193 void setInsertionModeAndEnd(InsertionMode, bool foreign); // Helper for resetInsertionModeAppropriately … … 185 201 bool m_reportErrors; 186 202 bool m_isPaused; 203 bool m_isFakeInsertionMode; 187 204 188 205 // FIXME: InsertionModes should be a separate object to prevent direct
Note: See TracChangeset
for help on using the changeset viewer.