Changeset 59751 in webkit
- Timestamp:
- May 19, 2010 12:33:28 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 deleted
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r59748 r59751 1 2010-05-18 Yuzo Fujishima <yuzo@google.com> 2 3 Reviewed by Shinichiro Hamaji. 4 5 Make CSS Parser properly handle only-for-pages pseudo-classes. 6 7 https://bugs.webkit.org/show_bug.cgi?id=38731 8 9 * fast/css/misplaced-paged-media-pseudo-expected.txt: Removed. 10 * fast/css/misplaced-paged-media-pseudo.html: Removed. 11 * printing/page-rule-css-text-expected.txt: 12 * printing/page-rule-css-text.html: 13 * printing/pseudo-class-outside-page-expected.txt: 14 * printing/pseudo-class-outside-page.html: 15 1 16 2010-05-18 Alejandro G. Castro <alex@igalia.com> 2 17 -
trunk/LayoutTests/printing/page-rule-css-text-expected.txt
r58922 r59751 1 1 @page { margin-top: 5cm; margin-bottom: 10cm; } 2 @page :left { margin-right: 3cm; } 3 @page :right { margin-left: 3cm; } 4 @page :first { border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; } 2 5 @page hello { color: green; } 6 @page world:right { background-color: green; } 7 @media print { @page somepage:first { margin-top: 3cm; margin-right: 3cm; margin-bottom: 3cm; margin-left: 3cm; } } 3 8 @page auto_page { size: auto; } 4 9 @page square_page { size: 4in; } -
trunk/LayoutTests/printing/page-rule-css-text.html
r58385 r59751 3 3 <head> 4 4 <style type="text/css"> 5 @page :visited { /* :visited is invalid for @page */ 6 color: red; 7 } 8 @page a_page_name:visited { /* :visited is invalid for @page */ 9 background-color: red; 10 } 11 5 12 @page { 6 13 margin-top:5cm; … … 20 27 } 21 28 @page world:right { 22 color:red;29 background-color:green; 23 30 } 24 31 @media print { -
trunk/LayoutTests/printing/pseudo-class-outside-page-expected.txt
r58578 r59751 1 1 Test case for SHOULD NEVER BE REACHED assertion loading forbes.com. Paged media related pseudo-classes should be ignored outside of @page. 2 2 3 You should see a green box .3 You should see a green box for Test 1, "Test n: PASS" for the rest. 4 4 5 Test 2: PASS 6 Test 3: PASS 7 Test 4: PASS 8 Test 5: PASS 9 Test 6: PASS 10 Test 7: PASS 11 Test 8: PASS 12 Test 9: PASS 13 Test 10: PASS 14 Test 11: PASS 15 Test 12: PASS 16 Test 13: PASS 5 17 PASS -
trunk/LayoutTests/printing/pseudo-class-outside-page.html
r58578 r59751 7 7 background-color: green; 8 8 } 9 #test {9 #test1 { 10 10 width: 100px; 11 11 height: 100px; 12 12 background-color: green; 13 13 } 14 .exception_test { 15 color: red; 16 } 14 17 /* These selectors should be ignored */ 15 #test :first {18 #test1:first { 16 19 background-color: red; 17 20 } 18 #test :left {21 #test1:left { 19 22 background-color: red; 20 23 } 21 #test :right {24 #test1:right { 22 25 background-color: red; 23 26 } … … 30 33 { 31 34 var expected = getComputedStyle(document.getElementById("green"), null).backgroundColor; 32 var actual = getComputedStyle(document.getElementById("test "), null).backgroundColor;35 var actual = getComputedStyle(document.getElementById("test1"), null).backgroundColor; 33 36 var result = "PASS"; 34 37 if (actual != expected) 35 38 result = "Expected " + expected + ", but comes " + actual; 36 39 document.getElementById("result").innerHTML = result; 40 41 var invalidSelectors = [":first", ":left", ":right", "::first", "::left", "::right", 42 ".login-popup:first", ".login-popup:left", ".login-popup:right", ".login-popup::first", ".login-popup::left", ".login-popup::right"]; 43 for (var testId = 2; testId <= 13; testId++) { 44 var element = document.getElementById("test" + testId); 45 var invalidSelector = invalidSelectors[testId - 2]; 46 try { 47 document.querySelectorAll(invalidSelector); 48 element.innerHTML = "Test " + testId + ": FAIL"; 49 } catch (e) { 50 element.innerHTML = "Test " + testId + ": PASS"; 51 element.style.color = "green"; 52 } 53 } 37 54 } 38 55 </script> … … 45 62 46 63 <p> 47 You should see a green box .64 You should see a green box for Test 1, "Test n: PASS" for the rest. 48 65 49 66 <div id="green"></div> 50 <div id="test"></div> 67 <div id="test1"></div> 68 <div id="test2" class="exception_test">Test 2: Didn't run</div> 69 <div id="test3" class="exception_test">Test 3: Didn't run</div> 70 <div id="test4" class="exception_test">Test 4: Didn't run</div> 71 <div id="test5" class="exception_test">Test 5: Didn't run</div> 72 <div id="test6" class="exception_test">Test 6: Didn't run</div> 73 <div id="test7" class="exception_test">Test 7: Didn't run</div> 74 <div id="test8" class="exception_test">Test 8: Didn't run</div> 75 <div id="test9" class="exception_test">Test 9: Didn't run</div> 76 <div id="test10" class="exception_test">Test 10: Didn't run</div> 77 <div id="test11" class="exception_test">Test 11: Didn't run</div> 78 <div id="test12" class="exception_test">Test 12: Didn't run</div> 79 <div id="test13" class="exception_test">Test 13: Didn't run</div> 51 80 <div id="result"></div> 52 81 -
trunk/WebCore/ChangeLog
r59750 r59751 1 2010-05-18 Yuzo Fujishima <yuzo@google.com> 2 3 Reviewed by Shinichiro Hamaji. 4 5 Make CSS Parser properly handle only-for-pages pseudo-classes. 6 7 A new Match category, PagePseudoClass, is introduced to distinguish 8 only-for-pages pseudo-classes from others. A new symbol, pseudo_page, 9 is introduced to handle them separately. 10 11 https://bugs.webkit.org/show_bug.cgi?id=38731 12 13 * css/CSSGrammar.y: 14 * css/CSSParser.cpp: 15 (WebCore::CSSParser::createMarginAtRule): 16 * css/CSSParser.h: 17 * css/CSSSelector.cpp: 18 (WebCore::CSSSelector::extractPseudoType): 19 (WebCore::CSSSelector::selectorText): 20 * css/CSSSelector.h: 21 (WebCore::CSSSelector::): 22 * css/CSSStyleSelector.cpp: 23 (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): 24 1 25 2010-05-19 Adam Barth <abarth@webkit.org> 2 26 -
trunk/WebCore/css/CSSGrammar.y
r58374 r59751 258 258 %type <selector> attrib 259 259 %type <selector> pseudo 260 %type <selector> pseudo_page 260 261 %type <selector> page_selector 261 262 … … 756 757 '{' maybe_space declarations_and_margins closing_brace { 757 758 CSSParser* p = static_cast<CSSParser*>(parser); 758 $$ = p->createPageRule(p->sinkFloatingSelector($3)); 759 if ($3) 760 $$ = p->createPageRule(p->sinkFloatingSelector($3)); 761 else { 762 // Clear properties in the invalid @page rule. 763 p->clearProperties(); 764 // Also clear margin at-rules here once we fully implement margin at-rules parsing. 765 $$ = 0; 766 } 759 767 } 760 768 | PAGE_SYM error invalid_block { … … 772 780 $$->m_tag = QualifiedName(nullAtom, $1, p->m_defaultNamespace); 773 781 } 774 | IDENT pseudo {782 | IDENT pseudo_page { 775 783 CSSParser* p = static_cast<CSSParser*>(parser); 776 784 $$ = $2; … … 778 786 $$->m_tag = QualifiedName(nullAtom, $1, p->m_defaultNamespace); 779 787 } 780 | pseudo {788 | pseudo_page { 781 789 $$ = $1; 782 790 } … … 1167 1175 | STRING 1168 1176 ; 1177 1178 pseudo_page: 1179 ':' IDENT { 1180 $$ = static_cast<CSSParser*>(parser)->createFloatingSelector(); 1181 $$->m_match = CSSSelector::PagePseudoClass; 1182 $2.lower(); 1183 $$->m_value = $2; 1184 CSSSelector::PseudoType type = $$->pseudoType(); 1185 if (type == CSSSelector::PseudoUnknown) 1186 $$ = 0; 1187 } 1169 1188 1170 1189 pseudo: -
trunk/WebCore/css/CSSParser.cpp
r59473 r59751 5347 5347 // - marginBox: margin box 5348 5348 // - m_parsedProperties: properties at [m_numParsedPropertiesBeforeMarginBox, m_numParsedProperties) are for this at-rule. 5349 // Don't forget to also update the action for page symbol in CSSGrammar.y such that margin at-rule data is cleared if page_selector is invalid. 5349 5350 5350 5351 endDeclarationsForMarginBox(); -
trunk/WebCore/css/CSSParser.h
r58867 r59751 210 210 void updateLastSelectorLine() { m_lastSelectorLine = m_line; } 211 211 212 void clearProperties(); 213 212 214 bool m_strict; 213 215 bool m_important; … … 246 248 void recheckAtKeyword(const UChar* str, int len); 247 249 248 void clearProperties();249 250 250 void setupParser(const char* prefix, const String&, const char* suffix); 251 251 -
trunk/WebCore/css/CSSSelector.cpp
r58922 r59751 425 425 void CSSSelector::extractPseudoType() const 426 426 { 427 if (m_match != PseudoClass && m_match != PseudoElement )427 if (m_match != PseudoClass && m_match != PseudoElement && m_match != PagePseudoClass) 428 428 return; 429 429 … … 432 432 bool element = false; // pseudo-element 433 433 bool compat = false; // single colon compatbility mode 434 bool isPagePseudoClass = false; // Page pseudo-class 434 435 435 436 switch (m_pseudoType) { … … 530 531 case PseudoLeftPage: 531 532 case PseudoRightPage: 532 // FIXME: These should only be allowed in @page rules. Disabled them altogether until that's implemented correctly. 533 isPagePseudoClass = true; 534 break; 535 } 536 537 bool matchPagePseudoClass = (m_match == PagePseudoClass); 538 if (matchPagePseudoClass != isPagePseudoClass) 533 539 m_pseudoType = PseudoUnknown; 534 return; 535 } 536 537 if (m_match == PseudoClass && element) { 540 else if (m_match == PseudoClass && element) { 538 541 if (!compat) 539 542 m_pseudoType = PseudoUnknown; … … 587 590 str += "."; 588 591 str += cs->m_value; 589 } else if (cs->m_match == CSSSelector::PseudoClass ) {592 } else if (cs->m_match == CSSSelector::PseudoClass || cs->m_match == CSSSelector::PagePseudoClass) { 590 593 str += ":"; 591 594 str += cs->m_value; -
trunk/WebCore/css/CSSSelector.h
r59197 r59751 86 86 PseudoClass, 87 87 PseudoElement, 88 Contain, // css3: E[foo*="bar"] 89 Begin, // css3: E[foo^="bar"] 90 End // css3: E[foo$="bar"] 88 Contain, // css3: E[foo*="bar"] 89 Begin, // css3: E[foo^="bar"] 90 End, // css3: E[foo$="bar"] 91 PagePseudoClass 91 92 }; 92 93 -
trunk/WebCore/css/CSSStyleSelector.cpp
r59724 r59751 2569 2569 return true; 2570 2570 } 2571 case CSSSelector::PseudoLeftPage:2572 case CSSSelector::PseudoRightPage:2573 case CSSSelector::PseudoFirstPage:2574 // Page media related pseudo-classes are not handled yet.2575 return false;2576 2571 case CSSSelector::PseudoUnknown: 2577 2572 case CSSSelector::PseudoNotParsed:
Note: See TracChangeset
for help on using the changeset viewer.