Index: third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp b/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp |
index bc07abdf5532092c9254895e197b39bd80720d38..a86df4b6cec4bb37ef1f3601a7e9612ad6e4c39a 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutTextControlSingleLine.cpp |
@@ -46,7 +46,6 @@ using namespace HTMLNames; |
LayoutTextControlSingleLine::LayoutTextControlSingleLine(HTMLInputElement* element) |
: LayoutTextControl(element) |
, m_shouldDrawCapsLockIndicator(false) |
- , m_desiredInnerEditorLogicalHeight(-1) |
{ |
} |
@@ -110,32 +109,14 @@ void LayoutTextControlSingleLine::layout() |
// the intrinsic height of the inner elements. |
// - Shrink the inner elment heights if the input height is samller than the |
// intrinsic heights of the inner elements. |
+ // The hack was removed for the inner-editor element. We should remove it |
+ // for containerElement() too. |
- // We don't honor paddings and borders for textfields without decorations |
- // and type=search if the text height is taller than the contentHeight() |
- // because of compability. |
+ // We don't honor paddings and borders for type=search if the text height is |
+ // taller than the contentHeight() because of compatibility. |
LayoutBox* innerEditorLayoutObject = innerEditorElement()->layoutBox(); |
bool innerEditorLayoutObjectHadLayout = innerEditorLayoutObject && innerEditorLayoutObject->needsLayout(); |
- LayoutBox* viewPortLayoutObject = editingViewPortElement() ? editingViewPortElement()->layoutBox() : 0; |
- |
- // To ensure consistency between layouts, we need to reset any conditionally overriden height. |
- if (innerEditorLayoutObject) { |
- innerEditorLayoutObject->clearOverrideLogicalContentHeight(); |
- // TODO(jchaffraix): We could probably skip some of these due to |
- // forcing children relayout below but keeping them for safety for now. |
- layoutScope.setNeedsLayout(innerEditorLayoutObject, LayoutInvalidationReason::TextControlChanged); |
- HTMLElement* placeholderElement = inputElement()->placeholderElement(); |
- if (LayoutBox* placeholderBox = placeholderElement ? placeholderElement->layoutBox() : 0) |
- layoutScope.setNeedsLayout(placeholderBox, LayoutInvalidationReason::TextControlChanged); |
- } |
- // TODO(jchaffraix): This logic is not correct and will yield to bugs such |
- // as crbug.com/529252. The fix is similar to what is done with |
- // innerEditorLayoutObject above. |
- if (viewPortLayoutObject && !viewPortLayoutObject->styleRef().logicalHeight().isAuto()) { |
- viewPortLayoutObject->mutableStyleRef().setLogicalHeight(Length(Auto)); |
- layoutScope.setNeedsLayout(viewPortLayoutObject, LayoutInvalidationReason::TextControlChanged); |
- } |
// This is the measuring phase. Thus we force children to be relayout so |
// that the checks below are executed consistently. |
@@ -144,22 +125,7 @@ void LayoutTextControlSingleLine::layout() |
Element* container = containerElement(); |
LayoutBox* containerLayoutObject = container ? container->layoutBox() : 0; |
- // Set the text block height |
- LayoutUnit desiredLogicalHeight = textBlockLogicalHeight(); |
LayoutUnit logicalHeightLimit = computeLogicalHeightLimit(); |
- if (innerEditorLayoutObject && innerEditorLayoutObject->logicalHeight() > logicalHeightLimit) { |
- if (desiredLogicalHeight != innerEditorLayoutObject->logicalHeight()) |
- layoutScope.setNeedsLayout(this, LayoutInvalidationReason::TextControlChanged); |
- |
- m_desiredInnerEditorLogicalHeight = desiredLogicalHeight; |
- |
- innerEditorLayoutObject->setOverrideLogicalContentHeight(desiredLogicalHeight); |
- layoutScope.setNeedsLayout(innerEditorLayoutObject, LayoutInvalidationReason::TextControlChanged); |
- if (viewPortLayoutObject) { |
- viewPortLayoutObject->mutableStyleRef().setLogicalHeight(Length(desiredLogicalHeight, Fixed)); |
- layoutScope.setNeedsLayout(viewPortLayoutObject, LayoutInvalidationReason::TextControlChanged); |
- } |
- } |
// The container might be taller because of decoration elements. |
if (containerLayoutObject) { |
containerLayoutObject->layoutIfNeeded(); |
@@ -243,16 +209,10 @@ bool LayoutTextControlSingleLine::nodeAtPoint(HitTestResult& result, const HitTe |
void LayoutTextControlSingleLine::styleDidChange(StyleDifference diff, const ComputedStyle* oldStyle) |
{ |
- m_desiredInnerEditorLogicalHeight = -1; |
LayoutTextControl::styleDidChange(diff, oldStyle); |
// We may have set the width and the height in the old style in layout(). |
// Reset them now to avoid getting a spurious layout hint. |
- Element* viewPort = editingViewPortElement(); |
- if (LayoutObject* viewPortLayoutObject = viewPort ? viewPort->layoutObject() : 0) { |
- viewPortLayoutObject->mutableStyleRef().setHeight(Length()); |
- viewPortLayoutObject->mutableStyleRef().setWidth(Length()); |
- } |
Element* container = containerElement(); |
if (LayoutObject* containerLayoutObject = container ? container->layoutObject() : 0) { |
containerLayoutObject->mutableStyleRef().setHeight(Length()); |
@@ -286,15 +246,13 @@ void LayoutTextControlSingleLine::capsLockStateMayHaveChanged() |
bool LayoutTextControlSingleLine::hasControlClip() const |
{ |
- // Apply control clip for text fields with decorations. |
- return !!containerElement(); |
+ return true; |
} |
LayoutRect LayoutTextControlSingleLine::controlClipRect(const LayoutPoint& additionalOffset) const |
{ |
- ASSERT(hasControlClip()); |
LayoutRect clipRect = contentBoxRect(); |
- if (containerElement()->layoutBox()) |
+ if (containerElement() && containerElement()->layoutBox()) |
clipRect = unionRect(clipRect, containerElement()->layoutBox()->frameRect()); |
clipRect.moveBy(additionalOffset); |
return clipRect; |
@@ -364,10 +322,8 @@ PassRefPtr<ComputedStyle> LayoutTextControlSingleLine::createInnerEditorStyle(co |
textBlockStyle->setOverflowWrap(NormalOverflowWrap); |
textBlockStyle->setTextOverflow(textShouldBeTruncated() ? TextOverflowEllipsis : TextOverflowClip); |
- if (m_desiredInnerEditorLogicalHeight >= 0) |
- textBlockStyle->setLogicalHeight(Length(m_desiredInnerEditorLogicalHeight, Fixed)); |
// Do not allow line-height to be smaller than our default. |
- if (textBlockStyle->fontSize() >= lineHeight(true, HorizontalLine, PositionOfInteriorLineBoxes)) |
+ if (textBlockStyle->fontSize() >= lineHeight(true, HorizontalLine, PositionOfInteriorLineBoxes) || !startStyle.logicalHeight().isIntrinsicOrAuto()) |
textBlockStyle->setLineHeight(ComputedStyle::initialLineHeight()); |
textBlockStyle->setDisplay(BLOCK); |