| Index: third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/LayoutObject.cpp b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| index 24d0131ae325d01d5b7145bbc8bd1cbb5600983c..394c12af172a30d2ca68d8813de0324c0913ebc8 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutObject.cpp
|
| @@ -1384,8 +1384,7 @@ Color LayoutObject::selectionBackgroundColor() const {
|
| if (!isSelectable())
|
| return Color::transparent;
|
|
|
| - if (RefPtr<ComputedStyle> pseudoStyle =
|
| - getUncachedPseudoStyleFromParentOrShadowHost())
|
| + if (RefPtr<ComputedStyle> pseudoStyle = getUncachedSelectionStyle())
|
| return resolveColor(*pseudoStyle, CSSPropertyBackgroundColor)
|
| .blendWithWhite();
|
| return frame()->selection().isFocusedAndActive()
|
| @@ -1401,8 +1400,7 @@ Color LayoutObject::selectionColor(
|
| if (!isSelectable() || (globalPaintFlags & GlobalPaintSelectionOnly))
|
| return resolveColor(colorProperty);
|
|
|
| - if (RefPtr<ComputedStyle> pseudoStyle =
|
| - getUncachedPseudoStyleFromParentOrShadowHost())
|
| + if (RefPtr<ComputedStyle> pseudoStyle = getUncachedSelectionStyle())
|
| return resolveColor(*pseudoStyle, colorProperty);
|
| if (!LayoutTheme::theme().supportsSelectionForegroundColors())
|
| return resolveColor(colorProperty);
|
| @@ -3067,11 +3065,15 @@ PassRefPtr<ComputedStyle> LayoutObject::getUncachedPseudoStyle(
|
| element, pseudoStyleRequest, parentStyle, parentStyle);
|
| }
|
|
|
| -PassRefPtr<ComputedStyle>
|
| -LayoutObject::getUncachedPseudoStyleFromParentOrShadowHost() const {
|
| +PassRefPtr<ComputedStyle> LayoutObject::getUncachedSelectionStyle() const {
|
| if (!node())
|
| return nullptr;
|
|
|
| + // In Blink, ::selection only applies to direct children of the element on
|
| + // which ::selection is matched. In order to be able to style ::selection
|
| + // inside elements implemented with a UA shadow tree, like input::selection,
|
| + // we calculate ::selection style on the shadow host for elements inside the
|
| + // UA shadow.
|
| if (ShadowRoot* root = node()->containingShadowRoot()) {
|
| if (root->type() == ShadowRootType::UserAgent) {
|
| if (Element* shadowHost = node()->ownerShadowHost()) {
|
| @@ -3081,7 +3083,20 @@ LayoutObject::getUncachedPseudoStyleFromParentOrShadowHost() const {
|
| }
|
| }
|
|
|
| - return getUncachedPseudoStyle(PseudoStyleRequest(PseudoIdSelection));
|
| + // If we request ::selection style for LayoutText, query ::selection style on
|
| + // the parent element instead, as that is the node for which ::selection
|
| + // matches.
|
| + const LayoutObject* selectionLayoutObject = this;
|
| + Element* element = Traversal<Element>::firstAncestorOrSelf(*node());
|
| + if (!element)
|
| + return nullptr;
|
| + if (element != node()) {
|
| + selectionLayoutObject = element->layoutObject();
|
| + if (!selectionLayoutObject)
|
| + return nullptr;
|
| + }
|
| + return selectionLayoutObject->getUncachedPseudoStyle(
|
| + PseudoStyleRequest(PseudoIdSelection));
|
| }
|
|
|
| void LayoutObject::addAnnotatedRegions(Vector<AnnotatedRegionValue>& regions) {
|
|
|