[webkit-changes] cvs commit: LayoutTests/fast/css-generated-content 014.html 014-expected.txt

David hyatt at opensource.apple.com
Mon Oct 24 15:59:41 PDT 2005


hyatt       05/10/24 15:59:40

  Modified:    .        ChangeLog
               khtml/css cssstyleselector.cpp
  Added:       fast/css-generated-content 014.html 014-expected.txt
  Log:
  	Fix for 5485, make sure generated content's "rightmost selector"
  	check does not apply once you move to another selector in the
  	compound selector chain.
  
          Reviewed by mjs
  
          * khtml/css/cssstyleselector.cpp:
          (khtml::CSSStyleSelector::checkSelector):
  
  Revision  Changes    Path
  1.278     +11 -0     WebCore/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebCore/ChangeLog,v
  retrieving revision 1.277
  retrieving revision 1.278
  diff -u -r1.277 -r1.278
  --- ChangeLog	24 Oct 2005 22:51:04 -0000	1.277
  +++ ChangeLog	24 Oct 2005 22:59:30 -0000	1.278
  @@ -1,3 +1,14 @@
  +2005-10-24  David Hyatt  <hyatt at apple.com>
  +
  +	Fix for 5485, make sure generated content's "rightmost selector"
  +	check does not apply once you move to another selector in the 
  +	compound selector chain.
  +	
  +        Reviewed by mjs
  +
  +        * khtml/css/cssstyleselector.cpp:
  +        (khtml::CSSStyleSelector::checkSelector):
  +
   2005-10-24  Mitz Pettel  <opendarwin.org at mitzpettel.com>
   
           Reviewed by Darin, committed by beth.
  
  
  
  1.214     +1 -1      WebCore/khtml/css/cssstyleselector.cpp
  
  Index: cssstyleselector.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/css/cssstyleselector.cpp,v
  retrieving revision 1.213
  retrieving revision 1.214
  diff -u -r1.213 -r1.214
  --- cssstyleselector.cpp	23 Oct 2005 15:12:31 -0000	1.213
  +++ cssstyleselector.cpp	24 Oct 2005 22:59:37 -0000	1.214
  @@ -1100,7 +1100,7 @@
   	    //kdDebug() << "CSSOrderedRule::checkSelector" << endl;
   	    ElementImpl *elem = static_cast<ElementImpl *>(n);
   	    // a selector is invalid if something follows :first-xxx
  -	    if (dynamicPseudo != RenderStyle::NOPSEUDO)
  +	    if (elem == element && dynamicPseudo != RenderStyle::NOPSEUDO)
   		return false;
   	    if (!checkOneSelector(sel, elem)) return false;
   	    //kdDebug() << "CSSOrderedRule::checkSelector: passed" << endl;
  
  
  
  1.1                  LayoutTests/fast/css-generated-content/014.html
  
  Index: 014.html
  ===================================================================
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
  	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
  	<title>Safari CSS2 :after test</title>
  	<style type="text/css">
  	/* the following styles are for general layout purposes;
  	   they are not required for the purposes of this example */
  	div.box{
  	   border:1px solid #000;
  	   margin:25px 0;
  	   padding:25px;
  	}
  	code{
  	   font-weight:bold;
  	}
  	pre{
  	   margin-left:20px;
  	}
  	pre.error{
  	   color:red;
  	}
  	pre.ok{
  	   color:green;
  	}
  	</style>
  </head>
  <body>
  <h1>Problem: Safari improperly handles generated content in certain cases when used with multiple class names</h1>
  <p><em>When referencing an element by two class names simultaneously, Safari won't generate content (using :before or :after) within the element.</em></p>
  <p>Assume we have a <code>div</code> with two class names: <code>box</code> and <code>one</code>. Within that <code>div</code>, we have a <code>p</code> (paragraph) tag, after which we'd like to insert generated content. One way to do so would be the following:</p>
  <pre class="error"><code>div.box.one p:after{ content:'generated content here!'; }</code></pre>
  <p>But that doesn't work in Safari. However, if you drop one of the class names, as shown below, it works as expected:</p>
  <pre class="ok"><code>div.box p:after{ content:'generated content here!'; }</code></pre>
  <p>Note also that the bug only applies to content <em>within</em> the classed element &mdash; generating content <em>before or after the element itself</em> works fine:</p>
  <pre class="ok"><code>div.box.one:after{ content:'generated content here!'; }</code></pre>
  
  <hr />
  
  <!-- all code necessary for the example, including CSS, is below: -->
  
  <h2>Example (view source to see CSS and HTML):</h2>
  <style type="text/css">
      div.box.one p:after{
          content:'generated content';
          color:green;
          display:block;
      }
      div.two p:after{
          content:'generated content';
          color:green;
          display:block;
      }
  </style>
  
  <p>Both boxes below should contain generated content (<span style="color:green;">in green</span>):</p>
  
  <div class="box one">
      <h3>Box 1</h3>
      <p>This box should contain the text "generated content" in CSS2-compliant browsers (but won't in Safari).</p>
  </div>
  
  <div class="box two">
      <h3>Box 2</h3>
      <p>This box should contain the text "generated content" in CSS2-compliant browsers, including Safari.</p>
  </div>
  
  <!-- end example -->
  
  </body>
  </html>
  
  
  
  1.1                  LayoutTests/fast/css-generated-content/014-expected.txt
  
  Index: 014-expected.txt
  ===================================================================
  layer at (0,0) size 785x881
    RenderCanvas at (0,0) size 785x600
  layer at (0,0) size 785x881
    RenderBlock {HTML} at (0,0) size 785x881
      RenderBody {BODY} at (8,21) size 769x835
        RenderBlock {H1} at (0,0) size 769x74
          RenderText {TEXT} at (0,0) size 750x74
            text run at (0,0) width 750: "Problem: Safari improperly handles generated content"
            text run at (0,37) width 716: "in certain cases when used with multiple class names"
        RenderBlock {P} at (0,95) size 769x36
          RenderInline {EM} at (0,0) size 755x36
            RenderText {TEXT} at (0,0) size 755x36
              text run at (0,0) width 755: "When referencing an element by two class names simultaneously, Safari won't generate content (using :before or :after)"
              text run at (0,18) width 119: "within the element."
        RenderBlock {P} at (0,147) size 769x36
          RenderText {TEXT} at (0,0) size 123x18
            text run at (0,0) width 123: "Assume we have a "
          RenderInline {CODE} at (0,0) size 24x15
            RenderText {TEXT} at (123,2) size 24x15
              text run at (123,2) width 24: "div"
          RenderText {TEXT} at (147,0) size 146x18
            text run at (147,0) width 146: " with two class names: "
          RenderInline {CODE} at (0,0) size 24x15
            RenderText {TEXT} at (293,2) size 24x15
              text run at (293,2) width 24: "box"
          RenderText {TEXT} at (317,0) size 31x18
            text run at (317,0) width 31: " and "
          RenderInline {CODE} at (0,0) size 24x15
            RenderText {TEXT} at (348,2) size 24x15
              text run at (348,2) width 24: "one"
          RenderText {TEXT} at (372,0) size 82x18
            text run at (372,0) width 82: ". Within that "
          RenderInline {CODE} at (0,0) size 24x15
            RenderText {TEXT} at (454,2) size 24x15
              text run at (454,2) width 24: "div"
          RenderText {TEXT} at (478,0) size 76x18
            text run at (478,0) width 76: ", we have a "
          RenderInline {CODE} at (0,0) size 8x15
            RenderText {TEXT} at (554,2) size 8x15
              text run at (554,2) width 8: "p"
          RenderText {TEXT} at (562,0) size 741x36
            text run at (562,0) width 179: " (paragraph) tag, after which"
            text run at (0,18) width 501: "we'd like to insert generated content. One way to do so would be the following:"
        RenderBlock {PRE} at (20,199) size 749x15 [color=#FF0000]
          RenderInline {CODE} at (0,0) size 456x15
            RenderText {TEXT} at (0,0) size 456x15
              text run at (0,0) width 456: "div.box.one p:after{ content:'generated content here!'; }"
        RenderBlock {P} at (0,230) size 769x18
          RenderText {TEXT} at (0,0) size 732x18
            text run at (0,0) width 732: "But that doesn't work in Safari. However, if you drop one of the class names, as shown below, it works as expected:"
        RenderBlock {PRE} at (20,264) size 749x15 [color=#008000]
          RenderInline {CODE} at (0,0) size 424x15
            RenderText {TEXT} at (0,0) size 424x15
              text run at (0,0) width 424: "div.box p:after{ content:'generated content here!'; }"
        RenderBlock {P} at (0,295) size 769x36
          RenderText {TEXT} at (0,0) size 288x18
            text run at (0,0) width 288: "Note also that the bug only applies to content "
          RenderInline {EM} at (0,0) size 39x18
            RenderText {TEXT} at (288,0) size 39x18
              text run at (288,0) width 39: "within"
          RenderText {TEXT} at (327,0) size 269x18
            text run at (327,0) width 269: " the classed element \x{2014} generating content "
          RenderInline {EM} at (0,0) size 763x36
            RenderText {TEXT} at (596,0) size 763x36
              text run at (596,0) width 167: "before or after the element"
              text run at (0,18) width 29: "itself"
          RenderText {TEXT} at (29,18) size 75x18
            text run at (29,18) width 75: " works fine:"
        RenderBlock {PRE} at (20,347) size 749x15 [color=#008000]
          RenderInline {CODE} at (0,0) size 440x15
            RenderText {TEXT} at (0,0) size 440x15
              text run at (0,0) width 440: "div.box.one:after{ content:'generated content here!'; }"
        RenderBlock {HR} at (0,375) size 769x2 [border: (1px inset #000000)]
        RenderBlock {H2} at (0,396) size 769x28
          RenderText {TEXT} at (0,0) size 477x28
            text run at (0,0) width 477: "Example (view source to see CSS and HTML):"
        RenderBlock {P} at (0,443) size 769x18
          RenderText {TEXT} at (0,0) size 335x18
            text run at (0,0) width 335: "Both boxes below should contain generated content ("
          RenderInline {SPAN} at (0,0) size 51x18 [color=#008000]
            RenderText {TEXT} at (335,0) size 51x18
              text run at (335,0) width 51: "in green"
          RenderText {TEXT} at (386,0) size 9x18
            text run at (386,0) width 9: "):"
        RenderBlock {DIV} at (0,486) size 769x162 [border: (1px solid #000000)]
          RenderBlock {H3} at (26,44) size 717x22
            RenderText {TEXT} at (0,0) size 48x22
              text run at (0,0) width 48: "Box 1"
          RenderBlock {P} at (26,84) size 717x36
            RenderBlock (anonymous) at (0,0) size 717x18
              RenderText {TEXT} at (0,0) size 650x18
                text run at (0,0) width 650: "This box should contain the text \"generated content\" in CSS2-compliant browsers (but won't in Safari)."
            RenderBlock (generated) at (0,18) size 717x18 [color=#008000]
              RenderText at (0,0) size 111x18
                text run at (0,0) width 111: "generated content"
        RenderBlock {DIV} at (0,673) size 769x162 [border: (1px solid #000000)]
          RenderBlock {H3} at (26,44) size 717x22
            RenderText {TEXT} at (0,0) size 48x22
              text run at (0,0) width 48: "Box 2"
          RenderBlock {P} at (26,84) size 717x36
            RenderBlock (anonymous) at (0,0) size 717x18
              RenderText {TEXT} at (0,0) size 628x18
                text run at (0,0) width 628: "This box should contain the text \"generated content\" in CSS2-compliant browsers, including Safari."
            RenderBlock (generated) at (0,18) size 717x18 [color=#008000]
              RenderText at (0,0) size 111x18
                text run at (0,0) width 111: "generated content"
  
  
  



More information about the webkit-changes mailing list