Chromium Code Reviews| Index: third_party/WebKit/Source/core/page/FocusController.cpp |
| diff --git a/third_party/WebKit/Source/core/page/FocusController.cpp b/third_party/WebKit/Source/core/page/FocusController.cpp |
| index 110d8bf12a8de8c3fa4cf6a7c0088d3b2008b582..c386c9b495af9c8b7811ef9be7e0c5c449acd7af 100644 |
| --- a/third_party/WebKit/Source/core/page/FocusController.cpp |
| +++ b/third_party/WebKit/Source/core/page/FocusController.cpp |
| @@ -783,8 +783,20 @@ void FocusController::focusDocumentView(Frame* frame, bool notifyEmbedder) { |
| if (focusedFrame && focusedFrame->view()) { |
| Document* document = focusedFrame->document(); |
| Element* focusedElement = document ? document->focusedElement() : nullptr; |
| - if (focusedElement) |
| - dispatchBlurEvent(*document, *focusedElement); |
| + if (focusedElement) { |
| + bool focusedFrameIsAncestor = false; |
|
alexmos
2017/03/16 17:37:11
I think this is really newFocusedFrameIsDescendant
|
| + for (Frame* newFrame = frame; newFrame; |
| + newFrame = newFrame->client()->parent()) { |
|
alexmos
2017/03/10 07:08:33
Why do we need to walk up the ancestor chain? Is
avallee
2017/03/13 19:18:10
I'm not sure how exiting a frame works. In the top
alexmos
2017/03/16 17:37:11
I was really confused here and what this has to do
alexmos
2017/03/16 17:59:47
I'll also note that at some point, when replicatin
|
| + if (newFrame == m_focusedFrame.get()) { |
| + focusedFrameIsAncestor = true; |
| + break; |
| + } |
| + } |
| + if (focusedFrameIsAncestor) |
|
alexmos
2017/03/10 07:08:33
What about the reverse case, where an <input> that
avallee
2017/03/13 19:18:10
This was doing the wrong thing when the browser no
alexmos
2017/03/16 17:37:11
I'm not sure I followed your explanation, but I th
|
| + document->clearFocusedElement(); |
|
alexmos
2017/03/10 07:08:33
Will |frame| always be a RemoteFrame when this is
avallee
2017/03/13 19:18:10
I think the issue would only happen with remote fr
alexmos
2017/03/16 17:37:11
See the big comment above regarding this.
|
| + else |
| + dispatchBlurEvent(*document, *focusedElement); |
|
alexmos
2017/03/10 07:08:33
Just to check, does clearFocusedElement also dispa
avallee
2017/03/13 19:18:10
Yes, it calls setFocusedElement(nullptr, /*some ot
alexmos
2017/03/16 17:37:11
Acknowledged.
|
| + } |
| } |
| LocalFrame* newFocusedFrame = |