REGRESSION (r110065-r110080): fast/forms/placeholder-set-attribute.html is failing...
authorjchaffraix@webkit.org <jchaffraix@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 26 Mar 2012 16:52:01 +0000 (16:52 +0000)
committerjchaffraix@webkit.org <jchaffraix@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 26 Mar 2012 16:52:01 +0000 (16:52 +0000)
https://bugs.webkit.org/show_bug.cgi?id=81802

Reviewed by Dan Bernstein.

Source/WebCore:

Covered by fast/forms/placeholder-set-attribute.html which should be less flaky.

Unfortunately no new test case as this bug requires a very specific set of conditions that I couldn't reproduce deterministically.

This is a regression from r110072: RenderTextControlSingleLine would rely on the placeholder's RenderLayer to properly repaint during
the first layout as the placeholder has overflow: hidden set. r110072 removed the layer in this case and thus we miss a repaint.

* rendering/RenderTextControlSingleLine.cpp:
(WebCore::RenderTextControlSingleLine::layout):
For our first layout, we need to make sure our placeholder is painted. layoutBlockChild has a very similar logic to force repaint
on a first layout. We don't hit this logic as the placeholder is explicitly skipped in RenderTextControl::layoutSpecialExcludedChild.

LayoutTests:

* platform/mac/Skipped: Unskip the test on Mac. The other platforms are either
skipping it for other reasons or did not have a specific entry for the flakiness.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@112114 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/platform/mac/Skipped
Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderTextControlSingleLine.cpp

index df84d640848838afa8eab72feecf89a78027b231..7387888fdd8990b67abeb20be69735399f04c789 100644 (file)
@@ -1,3 +1,13 @@
+2012-03-26  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        REGRESSION (r110065-r110080): fast/forms/placeholder-set-attribute.html is failing intermittently because WebKit fails to repaint after setting the placeholder attribute
+        https://bugs.webkit.org/show_bug.cgi?id=81802
+
+        Reviewed by Dan Bernstein.
+
+        * platform/mac/Skipped: Unskip the test on Mac. The other platforms are either
+        skipping it for other reasons or did not have a specific entry for the flakiness.
+
 2012-03-26  Julien Chaffraix  <jchaffraix@webkit.org>
 
         REGRESSION(r110072): fast/forms/textfield-overflow.html is failing
index 9b9109ad4238f53a5c33c6952cce0f523253026a..5009cfaf2c584d026425bf5ee602d02cdd0e83f7 100644 (file)
@@ -604,10 +604,6 @@ fast/workers/storage/use-same-database-in-page-and-workers.html
 # Allowed to regress to fix a crash. 
 fast/inline/continuation-outlines-with-layers.html
 
-# https://bugs.webkit.org/show_bug.cgi?id=81802 rdar://problem/11091412
-# fast/forms/placeholder-set-attribute.html is failing intermittently because WebKit fails to repaint after setting the placeholder attribute
-fast/forms/placeholder-set-attribute.html
-
 # Not possible to set UA string for media requests with all Mac media engines.
 http/tests/media/video-useragent.html
 
index 1de14852ca69a56e124ea37d2a6a6d91dcce6a02..63c631ee670890dacd681163a0ed07c739dbd3ab 100644 (file)
@@ -1,3 +1,22 @@
+2012-03-26  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        REGRESSION (r110065-r110080): fast/forms/placeholder-set-attribute.html is failing intermittently because WebKit fails to repaint after setting the placeholder attribute
+        https://bugs.webkit.org/show_bug.cgi?id=81802
+
+        Reviewed by Dan Bernstein.
+
+        Covered by fast/forms/placeholder-set-attribute.html which should be less flaky.
+
+        Unfortunately no new test case as this bug requires a very specific set of conditions that I couldn't reproduce deterministically.
+
+        This is a regression from r110072: RenderTextControlSingleLine would rely on the placeholder's RenderLayer to properly repaint during
+        the first layout as the placeholder has overflow: hidden set. r110072 removed the layer in this case and thus we miss a repaint.
+
+        * rendering/RenderTextControlSingleLine.cpp:
+        (WebCore::RenderTextControlSingleLine::layout):
+        For our first layout, we need to make sure our placeholder is painted. layoutBlockChild has a very similar logic to force repaint
+        on a first layout. We don't hit this logic as the placeholder is explicitly skipped in RenderTextControl::layoutSpecialExcludedChild.
+
 2012-03-26  Julien Chaffraix  <jchaffraix@webkit.org>
 
         REGRESSION(r110072): fast/forms/textfield-overflow.html is failing
index a3c128e544681b5f115c50549debea921727a7f6..fcc2803b5208d51f23fe207a8a5b23e3f7f36bea 100644 (file)
@@ -279,6 +279,7 @@ void RenderTextControlSingleLine::layout()
     if (RenderBox* placeholderBox = placeholderElement ? placeholderElement->renderBox() : 0) {
         placeholderBox->style()->setWidth(Length(innerTextRenderer->width() - placeholderBox->borderAndPaddingWidth(), Fixed));
         placeholderBox->style()->setHeight(Length(innerTextRenderer->height() - placeholderBox->borderAndPaddingHeight(), Fixed));
+        bool placeholderBoxHadLayout = placeholderBox->everHadLayout();
         placeholderBox->layoutIfNeeded();
         LayoutPoint textOffset = innerTextRenderer->location();
         if (innerBlockElement() && innerBlockElement()->renderBox())
@@ -286,6 +287,12 @@ void RenderTextControlSingleLine::layout()
         if (containerRenderer)
             textOffset += toLayoutSize(containerRenderer->location());
         placeholderBox->setLocation(textOffset);
+
+        if (!placeholderBoxHadLayout && placeholderBox->checkForRepaintDuringLayout()) {
+            // This assumes a shadow tree without floats. If floats are added, the
+            // logic should be shared with RenderBlock::layoutBlockChild.
+            placeholderBox->repaint();
+        }
     }
 }