Chromium Code Reviews| Index: Source/core/dom/ContainerNode.cpp |
| diff --git a/Source/core/dom/ContainerNode.cpp b/Source/core/dom/ContainerNode.cpp |
| index f399213a53970bcd7f8a6b467d8ce43cac065ba5..b709a75b3be82927d8aafce0084aea0184e5c589 100644 |
| --- a/Source/core/dom/ContainerNode.cpp |
| +++ b/Source/core/dom/ContainerNode.cpp |
| @@ -1084,6 +1084,19 @@ void ContainerNode::focusStateChanged() |
| void ContainerNode::setFocus(bool received) |
| { |
| + // Recurse up author shadow trees to mark shadow hosts if it matches :focus. |
| + // TODO(kochi): Handle UA shadows which marks multiple nodes as focused such as |
| + // <input type="date"> the same way as author shadow. |
| + if (isInShadowTree() && shadowHost()->shadowRoot()) |
|
hayato
2015/06/12 07:59:29
How about this? The intention would becomes more c
kochi
2015/06/12 08:21:35
Adopted your first suggestion.
|
| + shadowHost()->setFocus(received); |
| + |
| + // If this is an author shadow host and indirectly focused (has focused element within |
| + // its shadow root), update focus. |
| + if (isElementNode() && document().focusedElement() && document().focusedElement() != this) { |
| + if (toElement(this)->shadowRoot()) |
| + received = received && toElement(this)->shadowRoot()->delegatesFocus(); |
| + } |
| + |
| if (focused() == received) |
| return; |