- Revision
- 118711
- Author
- [email protected]
- Date
- 2012-05-28 16:52:47 -0700 (Mon, 28 May 2012)
Log Message
Can't edit <input> elements with :first-letter
https://bugs.webkit.org/show_bug.cgi?id=87615
Reviewed by Kent Tamura.
A check using canHaveGeneratedChildren() should cover not only
button and menulist, but also RenderTextControl.
This change pulles canHaveGeneratedChildren() up
from RenderDeprecatedFlexibleBox to RenderObject,
and lets RenderTextControl override it.
Test: fast/forms/input-first-letter-edit.html
* rendering/RenderBlock.cpp:
(WebCore):
(WebCore::RenderBlock::styleDidChange):
(WebCore::RenderBlock::updateFirstLetter):
* rendering/RenderBlock.h: Removed a static function canHaveGeneratedChildren()
(RenderBlock):
* rendering/RenderDeprecatedFlexibleBox.h:
* rendering/RenderObject.cpp:
(WebCore):
(WebCore::RenderObject::canHaveGeneratedChildren): Added.
* rendering/RenderObject.h:
(RenderObject):
* rendering/RenderTextControl.h:
Modified Paths
Added Paths
Diff
Added: trunk/LayoutTests/fast/forms/input-first-letter-edit-expected.html (0 => 118711)
--- trunk/LayoutTests/fast/forms/input-first-letter-edit-expected.html (rev 0)
+++ trunk/LayoutTests/fast/forms/input-first-letter-edit-expected.html 2012-05-28 23:52:47 UTC (rev 118711)
@@ -0,0 +1,8 @@
+<!DOCTYPE html>
+<html>
+<head>
+</head>
+<body>
+ <input type="text" id="target" value="Hello" autofocus="autofocus" />
+</body>
+</html>
Added: trunk/LayoutTests/fast/forms/input-first-letter-edit.html (0 => 118711)
--- trunk/LayoutTests/fast/forms/input-first-letter-edit.html (rev 0)
+++ trunk/LayoutTests/fast/forms/input-first-letter-edit.html 2012-05-28 23:52:47 UTC (rev 118711)
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+input:first-letter {
+ color: blue;
+}
+</style>
+<script>
+if (window.layoutTestController)
+ layoutTestController.waitUntilDone();
+function test()
+{
+ var target = document.getElementById("target");
+ target.focus();
+ if (window.eventSender) {
+ eventSender.keyDown("H");
+ eventSender.keyDown("e");
+ eventSender.keyDown("l");
+ eventSender.keyDown("l");
+ eventSender.keyDown("o");
+ document.execCommand("selectAll"); // Does selectAll for aligning the @autofocus attribute on the expectation.
+ layoutTestController.notifyDone();
+ }
+}
+</script>
+</head>
+<body _onload_="test()">
+ <input type="text" id="target" />
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (118710 => 118711)
--- trunk/Source/WebCore/ChangeLog 2012-05-28 22:49:16 UTC (rev 118710)
+++ trunk/Source/WebCore/ChangeLog 2012-05-28 23:52:47 UTC (rev 118711)
@@ -1,3 +1,32 @@
+2012-05-28 MORITA Hajime <[email protected]>
+
+ Can't edit <input> elements with :first-letter
+ https://bugs.webkit.org/show_bug.cgi?id=87615
+
+ Reviewed by Kent Tamura.
+
+ A check using canHaveGeneratedChildren() should cover not only
+ button and menulist, but also RenderTextControl.
+ This change pulles canHaveGeneratedChildren() up
+ from RenderDeprecatedFlexibleBox to RenderObject,
+ and lets RenderTextControl override it.
+
+ Test: fast/forms/input-first-letter-edit.html
+
+ * rendering/RenderBlock.cpp:
+ (WebCore):
+ (WebCore::RenderBlock::styleDidChange):
+ (WebCore::RenderBlock::updateFirstLetter):
+ * rendering/RenderBlock.h: Removed a static function canHaveGeneratedChildren()
+ (RenderBlock):
+ * rendering/RenderDeprecatedFlexibleBox.h:
+ * rendering/RenderObject.cpp:
+ (WebCore):
+ (WebCore::RenderObject::canHaveGeneratedChildren): Added.
+ * rendering/RenderObject.h:
+ (RenderObject):
+ * rendering/RenderTextControl.h:
+
2012-05-28 Arvid Nilsson <[email protected]>
[BlackBerry] Add support for layers with scale invariant size
Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (118710 => 118711)
--- trunk/Source/WebCore/rendering/RenderBlock.cpp 2012-05-28 22:49:16 UTC (rev 118710)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp 2012-05-28 23:52:47 UTC (rev 118711)
@@ -108,18 +108,6 @@
static int gDelayUpdateScrollInfo = 0;
static DelayedUpdateScrollInfoSet* gDelayedUpdateScrollInfoSet = 0;
-// We only create "generated" renderers like one for first-letter and
-// before/after pseudo elements if:
-// - the firstLetterBlock can have children in the DOM and
-// - the block doesn't have any special assumption on its text children.
-// This correctly prevents form controls from having such renderers.
-static inline bool canHaveGeneratedChildren(RenderObject* renderer)
-{
- return (renderer->canHaveChildren()
- && (!renderer->isDeprecatedFlexibleBox()
- || static_cast<RenderDeprecatedFlexibleBox*>(renderer)->canHaveGeneratedChildren()));
-}
-
bool RenderBlock::s_canPropagateFloatIntoSibling = false;
// This class helps dispatching the 'overflow' event on layout change. overflow can be set on RenderBoxes, yet the existing code
@@ -340,7 +328,7 @@
m_lineHeight = -1;
// Update pseudos for :before and :after now.
- if (!isAnonymous() && document()->usesBeforeAfterRules() && canHaveGeneratedChildren(this)) {
+ if (!isAnonymous() && document()->usesBeforeAfterRules() && canHaveGeneratedChildren()) {
updateBeforeAfterContent(BEFORE);
updateBeforeAfterContent(AFTER);
}
@@ -6005,7 +5993,7 @@
RenderObject* firstLetterBlock = start;
while (true) {
bool canHaveFirstLetterRenderer = firstLetterBlock->style()->hasPseudoStyle(FIRST_LETTER)
- && canHaveGeneratedChildren(firstLetterBlock);
+ && firstLetterBlock->canHaveGeneratedChildren();
if (canHaveFirstLetterRenderer)
return firstLetterBlock;
@@ -6164,7 +6152,7 @@
currChild = currChild->nextSibling();
} else if (currChild->isReplaced() || currChild->isRenderButton() || currChild->isMenuList())
break;
- else if (currChild->style()->hasPseudoStyle(FIRST_LETTER) && canHaveGeneratedChildren(currChild)) {
+ else if (currChild->style()->hasPseudoStyle(FIRST_LETTER) && currChild->canHaveGeneratedChildren()) {
// We found a lower-level node with first-letter, which supersedes the higher-level style
firstLetterBlock = currChild;
currChild = currChild->firstChild();
Modified: trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h (118710 => 118711)
--- trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h 2012-05-28 22:49:16 UTC (rev 118710)
+++ trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.h 2012-05-28 23:52:47 UTC (rev 118711)
@@ -49,7 +49,6 @@
virtual bool isDeprecatedFlexibleBox() const { return true; }
virtual bool isFlexingChildren() const { return m_flexingChildren; }
virtual bool isStretchingChildren() const { return m_stretchingChildren; }
- virtual bool canHaveGeneratedChildren() const { return true; }
void placeChild(RenderBox* child, const LayoutPoint& location);
Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (118710 => 118711)
--- trunk/Source/WebCore/rendering/RenderObject.cpp 2012-05-28 22:49:16 UTC (rev 118710)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp 2012-05-28 23:52:47 UTC (rev 118711)
@@ -2900,6 +2900,15 @@
return containingBlock ? !containingBlock->needsLayout() : true;
}
+// We only create "generated" child renderers like one for first-letter if:
+// - the firstLetterBlock can have children in the DOM and
+// - the block doesn't have any special assumption on its text children.
+// This correctly prevents form controls from having such renderers.
+bool RenderObject::canHaveGeneratedChildren() const
+{
+ return canHaveChildren();
+}
+
#if ENABLE(SVG)
RenderSVGResourceContainer* RenderObject::toRenderSVGResourceContainer()
Modified: trunk/Source/WebCore/rendering/RenderObject.h (118710 => 118711)
--- trunk/Source/WebCore/rendering/RenderObject.h 2012-05-28 22:49:16 UTC (rev 118710)
+++ trunk/Source/WebCore/rendering/RenderObject.h 2012-05-28 23:52:47 UTC (rev 118711)
@@ -242,6 +242,7 @@
// RenderObject tree manipulation
//////////////////////////////////////////
virtual bool canHaveChildren() const { return virtualChildren(); }
+ virtual bool canHaveGeneratedChildren() const;
virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; }
virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
virtual void addChildIgnoringContinuation(RenderObject* newChild, RenderObject* beforeChild = 0) { return addChild(newChild, beforeChild); }
Modified: trunk/Source/WebCore/rendering/RenderTextControl.h (118710 => 118711)
--- trunk/Source/WebCore/rendering/RenderTextControl.h 2012-05-28 22:49:16 UTC (rev 118710)
+++ trunk/Source/WebCore/rendering/RenderTextControl.h 2012-05-28 23:52:47 UTC (rev 118711)
@@ -71,6 +71,7 @@
virtual void computePreferredLogicalWidths();
virtual void removeLeftoverAnonymousBlock(RenderBlock*) { }
virtual bool avoidsFloats() const { return true; }
+ virtual bool canHaveGeneratedChildren() const OVERRIDE { return false; }
virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint&);