Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(353)

Side by Side Diff: third_party/WebKit/Source/core/page/FocusController.cpp

Issue 1423053002: Make document.activeElement work with OOPIF (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@focus-preserve-page-focus-on-subframe-navigations
Patch Set: Remove some plumbing that should instead be introduced in the window.focus() CL. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nuanti Ltd. 3 * Copyright (C) 2008 Nuanti Ltd.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 // FIXME: This is a temporary hack to ensure that we return a LocalFrame, ev en when the mainFrame is remote. 622 // FIXME: This is a temporary hack to ensure that we return a LocalFrame, ev en when the mainFrame is remote.
623 // FocusController needs to be refactored to deal with RemoteFrames cross-pr ocess focus transfers. 623 // FocusController needs to be refactored to deal with RemoteFrames cross-pr ocess focus transfers.
624 for (Frame* frame = m_page->mainFrame()->tree().top(); frame; frame = frame- >tree().traverseNext()) { 624 for (Frame* frame = m_page->mainFrame()->tree().top(); frame; frame = frame- >tree().traverseNext()) {
625 if (frame->isLocalRoot()) 625 if (frame->isLocalRoot())
626 return frame; 626 return frame;
627 } 627 }
628 628
629 return m_page->mainFrame(); 629 return m_page->mainFrame();
630 } 630 }
631 631
632 HTMLFrameOwnerElement* FocusController::focusedFrameOwnerElement(LocalFrame& cur rentFrame) const
633 {
634 Frame* focusedFrame = m_focusedFrame.get();
635 for (; focusedFrame; focusedFrame = focusedFrame->tree().parent()) {
636 if (focusedFrame->tree().parent() == &currentFrame) {
637 ASSERT(focusedFrame->owner()->isLocal());
638 return focusedFrame->deprecatedLocalOwner();
639 }
640 }
641 return nullptr;
642 }
643
632 void FocusController::setFocused(bool focused) 644 void FocusController::setFocused(bool focused)
633 { 645 {
634 if (isFocused() == focused) 646 if (isFocused() == focused)
635 return; 647 return;
636 648
637 m_isFocused = focused; 649 m_isFocused = focused;
638 650
639 if (!m_isFocused && focusedOrMainFrame()->isLocalFrame()) 651 if (!m_isFocused && focusedOrMainFrame()->isLocalFrame())
640 toLocalFrame(focusedOrMainFrame())->eventHandler().stopAutoscroll(); 652 toLocalFrame(focusedOrMainFrame())->eventHandler().stopAutoscroll();
641 653
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 837
826 RefPtrWillBeRawPtr<Document> newDocument = nullptr; 838 RefPtrWillBeRawPtr<Document> newDocument = nullptr;
827 if (element) 839 if (element)
828 newDocument = &element->document(); 840 newDocument = &element->document();
829 else if (newFocusedFrame && newFocusedFrame->isLocalFrame()) 841 else if (newFocusedFrame && newFocusedFrame->isLocalFrame())
830 newDocument = toLocalFrame(newFocusedFrame.get())->document(); 842 newDocument = toLocalFrame(newFocusedFrame.get())->document();
831 843
832 if (newDocument && oldDocument == newDocument && newDocument->focusedElement () == element) 844 if (newDocument && oldDocument == newDocument && newDocument->focusedElement () == element)
833 return true; 845 return true;
834 846
835 clearSelectionIfNeeded(oldFocusedFrame.get(), toLocalFrame(newFocusedFrame.g et()), element); 847 if (newFocusedFrame && newFocusedFrame->isLocalFrame())
848 clearSelectionIfNeeded(oldFocusedFrame.get(), toLocalFrame(newFocusedFra me.get()), element);
836 849
837 if (oldDocument && oldDocument != newDocument) 850 if (oldDocument && oldDocument != newDocument)
838 oldDocument->setFocusedElement(nullptr); 851 oldDocument->setFocusedElement(nullptr);
839 852
840 if (newFocusedFrame && !newFocusedFrame->page()) { 853 if (newFocusedFrame && !newFocusedFrame->page()) {
841 setFocusedFrame(nullptr); 854 setFocusedFrame(nullptr);
842 return false; 855 return false;
843 } 856 }
844 setFocusedFrame(newFocusedFrame); 857 setFocusedFrame(newFocusedFrame);
845 858
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 return consumed; 1073 return consumed;
1061 } 1074 }
1062 1075
1063 DEFINE_TRACE(FocusController) 1076 DEFINE_TRACE(FocusController)
1064 { 1077 {
1065 visitor->trace(m_page); 1078 visitor->trace(m_page);
1066 visitor->trace(m_focusedFrame); 1079 visitor->trace(m_focusedFrame);
1067 } 1080 }
1068 1081
1069 } // namespace blink 1082 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698