When the number of lines in a textarea decreases, the last (old) line isn't cleared.
To reproduce: open the URL, move the insertion point after the word "character" and delete it character by character. The "ch" will be left behind as the word starts fitting on the first line. Forcing a repaint will erase it.
Looks like result of r17018 (fix for <rdar://problem/4650813> REGRESSION: typing in a textarea in Safari is extremely slow).
I think this is what's killing the repaint, from RenderBlock::layoutInlineChildren():
// Don't allow this rect to spill out of our overflow box.
repaintRect.intersect(IntRect(0, 0, m_width, m_height));
When the above code executes, the inner div still hasn't reached its final height, so part of the needed repaint rect is clipped. I think that code can be moved to the end of layoutBlock(), where the repaint rect is used (and when the final height has been calculated).
Before the subtree optimization, some ancestor's repaint was hiding this bug.
Created attachment 11081 [details]
I was unable to reproduce this bug in an automated test case.
Comment on attachment 11081 [details]
after talking w/ Mitz, I don't think this is the right solution
Created attachment 11082 [details]
attaching test case
Another thing I noticed about the current code is that it neglects to account for the inner div's scroll offset.
Created attachment 11093 [details]
Test case showing that repainting isn't offset by the scroll amount.
*** Bug 11311 has been marked as a duplicate of this bug. ***
<rdar://problem/4788524> REGRESSION: Incomplete repaint of text area when deleting (11277)
Changing title to something more generic
Created attachment 11338 [details]
This patch fixes a basic overflow case, and the scroll offset problem, but doesn't fix the flexbox problem. We'll need to fix that separately.
Created attachment 11340 [details]
updated patch to include a simpler layout test for the scrolling case
Created attachment 11342 [details]
one more try...
this adds a test case to make sure outlines aren't getting clipped, and moves the code around about to fix that case.
Comment on attachment 11342 [details]
r=me with a change we discussed on IRC: adding a !repaintRect.isEmpty() to the check before the call to addRepaintInfo
Committed revision 17524.