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 f068696572f020fc0f025ca104c2c817b472dd91..4c0a57a3b63b0e56b4bb03fd089e4309c13444b1 100644 |
--- a/third_party/WebKit/Source/core/page/FocusController.cpp |
+++ b/third_party/WebKit/Source/core/page/FocusController.cpp |
@@ -629,6 +629,18 @@ Frame* FocusController::focusedOrMainFrame() const |
return m_page->mainFrame(); |
} |
+HTMLFrameOwnerElement* FocusController::focusedFrameOwnerElement(LocalFrame& currentFrame) const |
+{ |
+ Frame* focusedFrame = m_focusedFrame.get(); |
+ for (; focusedFrame; focusedFrame = focusedFrame->tree().parent()) { |
+ if (focusedFrame->tree().parent() == ¤tFrame) { |
+ ASSERT(focusedFrame->owner()->isLocal()); |
+ return focusedFrame->deprecatedLocalOwner(); |
+ } |
+ } |
+ return nullptr; |
+} |
+ |
void FocusController::setFocused(bool focused) |
{ |
if (isFocused() == focused) |
@@ -832,7 +844,8 @@ bool FocusController::setFocusedElement(Element* element, PassRefPtrWillBeRawPtr |
if (newDocument && oldDocument == newDocument && newDocument->focusedElement() == element) |
return true; |
- clearSelectionIfNeeded(oldFocusedFrame.get(), toLocalFrame(newFocusedFrame.get()), element); |
+ if (newFocusedFrame && newFocusedFrame->isLocalFrame()) |
+ clearSelectionIfNeeded(oldFocusedFrame.get(), toLocalFrame(newFocusedFrame.get()), element); |
if (oldDocument && oldDocument != newDocument) |
oldDocument->setFocusedElement(nullptr); |