Index: Source/core/rendering/RenderObject.cpp |
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp |
index 36cc3c3a510e50dfaeb972df4d7b9afffce99ba7..34d9465d34a710ac7a5fcc30922b544210b208aa 100644 |
--- a/Source/core/rendering/RenderObject.cpp |
+++ b/Source/core/rendering/RenderObject.cpp |
@@ -1787,6 +1787,17 @@ Color RenderObject::selectionBackgroundColor() const |
if (RefPtr<RenderStyle> pseudoStyle = getUncachedPseudoStyle(PseudoStyleRequest(SELECTION))) |
return resolveColor(pseudoStyle.get(), CSSPropertyBackgroundColor).blendWithWhite(); |
+ |
+ // If the element is in shadow tree of input element, then get the PseudoStyle |
+ // from the input element. |
+ if (node() && node()->shadowHost()) { |
+ RenderObject* shadowHostRenderer = node()->shadowHost()->renderer(); |
+ if (shadowHostRenderer->isTextControl()) { |
ojan
2014/04/09 01:57:53
Special casing text controls is not right. For exa
|
+ if (RefPtr<RenderStyle> pseudoStyle = shadowHostRenderer->getUncachedPseudoStyle(PseudoStyleRequest(SELECTION))) |
+ return resolveColor(pseudoStyle.get(), CSSPropertyBackgroundColor).blendWithWhite(); |
+ } |
+ } |
+ |
return frame()->selection().isFocusedAndActive() ? |
RenderTheme::theme().activeSelectionBackgroundColor() : |
RenderTheme::theme().inactiveSelectionBackgroundColor(); |
@@ -1801,6 +1812,17 @@ Color RenderObject::selectionColor(int colorProperty) const |
if (RefPtr<RenderStyle> pseudoStyle = getUncachedPseudoStyle(PseudoStyleRequest(SELECTION))) |
return resolveColor(pseudoStyle.get(), colorProperty); |
+ |
+ // If the element is in shadow tree of input element, then get the PseudoStyle |
+ // from the input element. |
+ if (node() && node()->shadowHost()) { |
+ RenderObject* shadowHostRenderer = node()->shadowHost()->renderer(); |
+ if (shadowHostRenderer->isTextControl()) { |
+ if (RefPtr<RenderStyle> pseudoStyle = shadowHostRenderer->getUncachedPseudoStyle(PseudoStyleRequest(SELECTION))) |
+ return resolveColor(pseudoStyle.get(), colorProperty); |
+ } |
+ } |
+ |
if (!RenderTheme::theme().supportsSelectionForegroundColors()) |
return resolveColor(colorProperty); |
return frame()->selection().isFocusedAndActive() ? |