Changeset 142531 in webkit
- Timestamp:
- Feb 11, 2013 3:34:55 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r142527 r142531 1 2013-02-11 Rafael Weinstein <rafaelw@chromium.org> 2 3 [HTMLTemplateElement] <template> inside of <head> may not create <body> if EOF is hit 4 https://bugs.webkit.org/show_bug.cgi?id=109338 5 6 Reviewed by Adam Barth. 7 8 * html5lib/resources/template.dat: 9 1 10 2013-02-11 Bem Jones-Bey <bjonesbe@adobe.com> 2 11 -
trunk/LayoutTests/html5lib/resources/template.dat
r142049 r142531 984 984 | <td> 985 985 | "Foo" 986 987 #data 988 <template></figcaption><sub><table></table> 989 #errors 990 #document 991 | <html> 992 | <head> 993 | <template> 994 | #document-fragment 995 | <sub> 996 | <table> 997 | <body> 998 999 #data 1000 <template><template> 1001 #errors 1002 #document 1003 | <html> 1004 | <head> 1005 | <template> 1006 | #document-fragment 1007 | <template> 1008 | #document-fragment 1009 | <body> 1010 1011 #data 1012 <template><div> 1013 #errors 1014 #document 1015 | <html> 1016 | <head> 1017 | <template> 1018 | #document-fragment 1019 | <div> 1020 | <body> 1021 1022 #data 1023 <template><template><div> 1024 #errors 1025 #document 1026 | <html> 1027 | <head> 1028 | <template> 1029 | #document-fragment 1030 | <template> 1031 | #document-fragment 1032 | <div> 1033 | <body> 1034 1035 #data 1036 <template><template><table> 1037 #errors 1038 #document 1039 | <html> 1040 | <head> 1041 | <template> 1042 | #document-fragment 1043 | <template> 1044 | #document-fragment 1045 | <table> 1046 | <body> 1047 1048 #data 1049 <template><template><tbody> 1050 #errors 1051 #document 1052 | <html> 1053 | <head> 1054 | <template> 1055 | #document-fragment 1056 | <template> 1057 | #document-fragment 1058 | <tbody> 1059 | <body> 1060 1061 #data 1062 <template><template><tr> 1063 #errors 1064 #document 1065 | <html> 1066 | <head> 1067 | <template> 1068 | #document-fragment 1069 | <template> 1070 | #document-fragment 1071 | <tr> 1072 | <body> 1073 1074 #data 1075 <template><template><td> 1076 #errors 1077 #document 1078 | <html> 1079 | <head> 1080 | <template> 1081 | #document-fragment 1082 | <template> 1083 | #document-fragment 1084 | <td> 1085 | <body> 1086 1087 #data 1088 <template><template><caption> 1089 #errors 1090 #document 1091 | <html> 1092 | <head> 1093 | <template> 1094 | #document-fragment 1095 | <template> 1096 | #document-fragment 1097 | <caption> 1098 | <body> 1099 1100 #data 1101 <template><template><colgroup> 1102 #errors 1103 #document 1104 | <html> 1105 | <head> 1106 | <template> 1107 | #document-fragment 1108 | <template> 1109 | #document-fragment 1110 | <colgroup> 1111 | <body> 1112 1113 #data 1114 <template><template><col> 1115 #errors 1116 #document 1117 | <html> 1118 | <head> 1119 | <template> 1120 | #document-fragment 1121 | <template> 1122 | #document-fragment 1123 | <col> 1124 | <body> 1125 1126 #data 1127 <template><template><tbody><select> 1128 #errors 1129 #document 1130 | <html> 1131 | <head> 1132 | <template> 1133 | #document-fragment 1134 | <template> 1135 | #document-fragment 1136 | <tbody> 1137 | <select> 1138 | <body> 1139 1140 #data 1141 <template><template><table>Foo 1142 #errors 1143 #document 1144 | <html> 1145 | <head> 1146 | <template> 1147 | #document-fragment 1148 | <template> 1149 | #document-fragment 1150 | <table> 1151 | "Foo" 1152 | <body> 1153 1154 #data 1155 <template><template><frame> 1156 #errors 1157 #document 1158 | <html> 1159 | <head> 1160 | <template> 1161 | #document-fragment 1162 | <template> 1163 | #document-fragment 1164 | <frame> 1165 | <body> 1166 1167 #data 1168 <template><template><script>var i 1169 #errors 1170 #document 1171 | <html> 1172 | <head> 1173 | <template> 1174 | #document-fragment 1175 | <template> 1176 | #document-fragment 1177 | <script> 1178 | "var i" 1179 | <body> 1180 1181 #data 1182 <template><template><style>var i 1183 #errors 1184 #document 1185 | <html> 1186 | <head> 1187 | <template> 1188 | #document-fragment 1189 | <template> 1190 | #document-fragment 1191 | <style> 1192 | "var i" 1193 | <body> -
trunk/Source/WebCore/ChangeLog
r142529 r142531 1 2013-02-11 Rafael Weinstein <rafaelw@chromium.org> 2 3 [HTMLTemplateElement] <template> inside of <head> may not create <body> if EOF is hit 4 https://bugs.webkit.org/show_bug.cgi?id=109338 5 6 Reviewed by Adam Barth. 7 8 This patch adds the logic to clear the stack of open elements back to the first <template> when EOF 9 is hit. This allows a <body> to be generated if the initial <template> was opened inside of <head>. 10 11 Tests added to html5lib. 12 13 * html/parser/HTMLTreeBuilder.cpp: 14 (WebCore): 15 (WebCore::HTMLTreeBuilder::popAllTemplates): 16 (WebCore::HTMLTreeBuilder::processEndTag): 17 (WebCore::HTMLTreeBuilder::processEndOfFile): 18 * html/parser/HTMLTreeBuilder.h: 19 (HTMLTreeBuilder): 20 1 21 2013-02-11 Andreas Kling <akling@apple.com> 2 22 -
trunk/Source/WebCore/html/parser/HTMLTreeBuilder.cpp
r142049 r142531 970 970 resetInsertionModeAppropriately(); 971 971 } 972 973 bool HTMLTreeBuilder::popAllTemplatesForEndOfFile() 974 { 975 if (m_templateInsertionModes.isEmpty()) 976 return false; 977 978 while (!m_templateInsertionModes.isEmpty()) { 979 if (m_tree.currentIsRootNode()) 980 return false; 981 if (m_tree.currentNode()->hasTagName(templateTag)) 982 m_templateInsertionModes.removeLast(); 983 m_tree.openElements()->pop(); 984 } 985 986 resetInsertionModeAppropriately(); 987 return true; 988 } 972 989 #endif 973 990 974 991 bool HTMLTreeBuilder::processColgroupEndTagForInColumnGroup() 975 992 { 976 if (m_tree.currentIsRootNode() || m_tree.currentNode()->hasTagName(templateTag)) { 993 bool ignoreFakeEndTag = m_tree.currentIsRootNode(); 994 #if ENABLE(TEMPLATE_ELEMENT) 995 ignoreFakeEndTag = ignoreFakeEndTag || m_tree.currentNode()->hasTagName(templateTag); 996 #endif 997 998 if (ignoreFakeEndTag) { 977 999 ASSERT(isParsingFragmentOrTemplateContents()); 978 1000 // FIXME: parse error … … 2502 2524 { 2503 2525 ASSERT(token->type() == HTMLTokenTypes::EndOfFile); 2504 #if ENABLE(TEMPLATE_ELEMENT)2505 m_templateInsertionModes.clear();2506 #endif2507 2526 switch (insertionMode()) { 2508 2527 case InitialMode: … … 2537 2556 #endif 2538 2557 notImplemented(); // Emit parse error based on what elements are still open. 2558 #if ENABLE(TEMPLATE_ELEMENT) 2559 if (popAllTemplatesForEndOfFile()) { 2560 processEndOfFile(token); 2561 return; 2562 } 2563 #endif 2539 2564 break; 2540 2565 case AfterBodyMode: … … 2551 2576 ASSERT(insertionMode() == AfterFramesetMode || insertionMode() == AfterAfterFramesetMode); 2552 2577 break; 2578 case InColumnGroupMode: 2579 if (m_tree.currentIsRootNode()) { 2580 ASSERT(isParsingFragment()); 2581 return; // FIXME: Should we break here instead of returning? 2582 } 2583 #if ENABLE(TEMPLATE_ELEMENT) 2584 ASSERT(m_tree.currentNode()->hasTagName(colgroupTag)); 2585 #else 2586 ASSERT(m_tree.currentNode()->hasTagName(colgroupTag) || m_tree.currentNode()->hasTagName(templateTag)); 2587 #endif 2588 processColgroupEndTagForInColumnGroup(); 2589 // Fall through 2553 2590 case InFramesetMode: 2554 2591 case InTableMode: … … 2556 2593 case InSelectInTableMode: 2557 2594 case InSelectMode: 2558 ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode || insertionMode() == InTableMode || insertionMode() == InFramesetMode || insertionMode() == InTableBodyMode );2595 ASSERT(insertionMode() == InSelectMode || insertionMode() == InSelectInTableMode || insertionMode() == InTableMode || insertionMode() == InFramesetMode || insertionMode() == InTableBodyMode || insertionMode() == InColumnGroupMode); 2559 2596 if (m_tree.currentNode() != m_tree.openElements()->rootNode()) 2560 2597 parseError(token); 2561 break; 2562 case InColumnGroupMode: 2563 if (m_tree.currentIsRootNode()) { 2564 ASSERT(isParsingFragment()); 2565 return; // FIXME: Should we break here instead of returning? 2566 } 2567 if (!processColgroupEndTagForInColumnGroup()) { 2568 ASSERT(isParsingFragmentOrTemplateContents()); 2569 return; // FIXME: Should we break here instead of returning? 2570 } 2571 processEndOfFile(token); 2572 return; 2598 2599 #if ENABLE(TEMPLATE_ELEMENT) 2600 if (popAllTemplatesForEndOfFile()) { 2601 processEndOfFile(token); 2602 return; 2603 } 2604 #endif 2605 break; 2573 2606 case InTableTextMode: 2574 2607 defaultForInTableText(); … … 2585 2618 return; 2586 2619 case TemplateContentsMode: 2587 if (m_tree.currentIsRootNode()) { 2588 ASSERT(isParsingFragment()); 2589 break; 2590 } 2620 #if ENABLE(TEMPLATE_ELEMENT) 2591 2621 parseError(token); 2592 m_tree.openElements()->pop(); 2593 resetInsertionModeAppropriately(); 2594 processEndOfFile(token); 2595 return; 2622 if (popAllTemplatesForEndOfFile()) { 2623 processEndOfFile(token); 2624 return; 2625 } 2626 break; 2627 #else 2628 ASSERT_NOT_REACHED(); 2629 #endif 2596 2630 } 2597 2631 ASSERT(m_tree.currentNode()); -
trunk/Source/WebCore/html/parser/HTMLTreeBuilder.h
r139523 r142531 196 196 void processTemplateStartTag(AtomicHTMLToken*); 197 197 void processTemplateEndTag(AtomicHTMLToken*); 198 bool popAllTemplatesForEndOfFile(); 198 199 #endif 199 200
Note: See TracChangeset
for help on using the changeset viewer.