Index: Source/core/rendering/RenderObject.cpp |
diff --git a/Source/core/rendering/RenderObject.cpp b/Source/core/rendering/RenderObject.cpp |
index 9c8086c3227d76a293079398053446b5ce96de1c..8859c394b148db83ef0f47fa02a3fae398c03884 100644 |
--- a/Source/core/rendering/RenderObject.cpp |
+++ b/Source/core/rendering/RenderObject.cpp |
@@ -1788,8 +1788,18 @@ Color RenderObject::selectionBackgroundColor() const |
if (!isSelectable()) |
return Color::transparent; |
- if (RefPtr<RenderStyle> pseudoStyle = getUncachedPseudoStyle(PseudoStyleRequest(SELECTION))) |
+ RefPtr<RenderStyle> pseudoStyle; |
+ if (node() && node()->shadowHost()) { |
+ // If the element is in shadow tree of input element, then get the PseudoStyle |
+ // from the input element. |
+ pseudoStyle = node()->shadowHost()->renderer()->getUncachedPseudoStyle(PseudoStyleRequest(SELECTION)); |
+ } else { |
+ pseudoStyle = getUncachedPseudoStyle(PseudoStyleRequest(SELECTION)); |
+ } |
+ |
+ if (pseudoStyle) |
return resolveColor(pseudoStyle.get(), CSSPropertyBackgroundColor).blendWithWhite(); |
+ |
return frame()->selection().isFocusedAndActive() ? |
RenderTheme::theme().activeSelectionBackgroundColor() : |
RenderTheme::theme().inactiveSelectionBackgroundColor(); |
@@ -1802,8 +1812,18 @@ Color RenderObject::selectionColor(int colorProperty) const |
if (!isSelectable() || (frame()->view()->paintBehavior() & PaintBehaviorSelectionOnly)) |
return resolveColor(colorProperty); |
- if (RefPtr<RenderStyle> pseudoStyle = getUncachedPseudoStyle(PseudoStyleRequest(SELECTION))) |
+ RefPtr<RenderStyle> pseudoStyle; |
+ if (node() && node()->shadowHost()) { |
+ // If the element is in shadow tree of input element, then get the PseudoStyle |
+ // from the input element. |
+ pseudoStyle = node()->shadowHost()->renderer()->getUncachedPseudoStyle(PseudoStyleRequest(SELECTION)); |
+ } else { |
+ pseudoStyle = getUncachedPseudoStyle(PseudoStyleRequest(SELECTION)); |
esprehn
2014/04/09 20:36:06
Why isn't this in a method, you do the exact same
|
+ } |
+ |
+ if (pseudoStyle) |
return resolveColor(pseudoStyle.get(), colorProperty); |
+ |
if (!RenderTheme::theme().supportsSelectionForegroundColors()) |
return resolveColor(colorProperty); |
return frame()->selection().isFocusedAndActive() ? |