| OLD | NEW |
| 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 804 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 815 return ToLocalFrame(focused_frame_.Get()); | 815 return ToLocalFrame(focused_frame_.Get()); |
| 816 } | 816 } |
| 817 | 817 |
| 818 Frame* FocusController::FocusedOrMainFrame() const { | 818 Frame* FocusController::FocusedOrMainFrame() const { |
| 819 if (LocalFrame* frame = FocusedFrame()) | 819 if (LocalFrame* frame = FocusedFrame()) |
| 820 return frame; | 820 return frame; |
| 821 | 821 |
| 822 // FIXME: This is a temporary hack to ensure that we return a LocalFrame, even | 822 // FIXME: This is a temporary hack to ensure that we return a LocalFrame, even |
| 823 // when the mainFrame is remote. FocusController needs to be refactored to | 823 // when the mainFrame is remote. FocusController needs to be refactored to |
| 824 // deal with RemoteFrames cross-process focus transfers. | 824 // deal with RemoteFrames cross-process focus transfers. |
| 825 for (Frame* frame = page_->MainFrame()->Tree().Top(); frame; | 825 for (Frame* frame = &page_->MainFrame()->Tree().Top(); frame; |
| 826 frame = frame->Tree().TraverseNext()) { | 826 frame = frame->Tree().TraverseNext()) { |
| 827 if (frame->IsLocalRoot()) | 827 if (frame->IsLocalRoot()) |
| 828 return frame; | 828 return frame; |
| 829 } | 829 } |
| 830 | 830 |
| 831 return page_->MainFrame(); | 831 return page_->MainFrame(); |
| 832 } | 832 } |
| 833 | 833 |
| 834 HTMLFrameOwnerElement* FocusController::FocusedFrameOwnerElement( | 834 HTMLFrameOwnerElement* FocusController::FocusedFrameOwnerElement( |
| 835 LocalFrame& current_frame) const { | 835 LocalFrame& current_frame) const { |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 971 current ? ScopedFocusNavigation::CreateFor(*current) | 971 current ? ScopedFocusNavigation::CreateFor(*current) |
| 972 : ScopedFocusNavigation::CreateForDocument(*document); | 972 : ScopedFocusNavigation::CreateForDocument(*document); |
| 973 Element* element = FindFocusableElementAcrossFocusScopes(type, scope); | 973 Element* element = FindFocusableElementAcrossFocusScopes(type, scope); |
| 974 if (!element) { | 974 if (!element) { |
| 975 // If there's a RemoteFrame on the ancestor chain, we need to continue | 975 // If there's a RemoteFrame on the ancestor chain, we need to continue |
| 976 // searching for focusable elements there. | 976 // searching for focusable elements there. |
| 977 if (frame->LocalFrameRoot() != frame->Tree().Top()) { | 977 if (frame->LocalFrameRoot() != frame->Tree().Top()) { |
| 978 document->ClearFocusedElement(); | 978 document->ClearFocusedElement(); |
| 979 document->SetSequentialFocusNavigationStartingPoint(nullptr); | 979 document->SetSequentialFocusNavigationStartingPoint(nullptr); |
| 980 SetFocusedFrame(nullptr); | 980 SetFocusedFrame(nullptr); |
| 981 ToRemoteFrame(frame->LocalFrameRoot()->Tree().Parent()) | 981 ToRemoteFrame(frame->LocalFrameRoot().Tree().Parent()) |
| 982 ->AdvanceFocus(type, frame->LocalFrameRoot()); | 982 ->AdvanceFocus(type, &frame->LocalFrameRoot()); |
| 983 return true; | 983 return true; |
| 984 } | 984 } |
| 985 | 985 |
| 986 // We didn't find an element to focus, so we should try to pass focus to | 986 // We didn't find an element to focus, so we should try to pass focus to |
| 987 // Chrome. | 987 // Chrome. |
| 988 if (!initial_focus && page_->GetChromeClient().CanTakeFocus(type)) { | 988 if (!initial_focus && page_->GetChromeClient().CanTakeFocus(type)) { |
| 989 document->ClearFocusedElement(); | 989 document->ClearFocusedElement(); |
| 990 document->SetSequentialFocusNavigationStartingPoint(nullptr); | 990 document->SetSequentialFocusNavigationStartingPoint(nullptr); |
| 991 SetFocusedFrame(nullptr); | 991 SetFocusedFrame(nullptr); |
| 992 page_->GetChromeClient().TakeFocus(type); | 992 page_->GetChromeClient().TakeFocus(type); |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1137 | 1137 |
| 1138 void FocusController::SetActive(bool active) { | 1138 void FocusController::SetActive(bool active) { |
| 1139 if (is_active_ == active) | 1139 if (is_active_ == active) |
| 1140 return; | 1140 return; |
| 1141 | 1141 |
| 1142 is_active_ = active; | 1142 is_active_ = active; |
| 1143 | 1143 |
| 1144 Frame* frame = FocusedOrMainFrame(); | 1144 Frame* frame = FocusedOrMainFrame(); |
| 1145 if (frame->IsLocalFrame()) { | 1145 if (frame->IsLocalFrame()) { |
| 1146 Document* const document = | 1146 Document* const document = |
| 1147 ToLocalFrame(frame)->LocalFrameRoot()->GetDocument(); | 1147 ToLocalFrame(frame)->LocalFrameRoot().GetDocument(); |
| 1148 DCHECK(document); | 1148 DCHECK(document); |
| 1149 if (!document->IsActive()) | 1149 if (!document->IsActive()) |
| 1150 return; | 1150 return; |
| 1151 // Invalidate all custom scrollbars because they support the CSS | 1151 // Invalidate all custom scrollbars because they support the CSS |
| 1152 // window-active attribute. This should be applied to the entire page so | 1152 // window-active attribute. This should be applied to the entire page so |
| 1153 // we invalidate from the root FrameView instead of just the focused. | 1153 // we invalidate from the root FrameView instead of just the focused. |
| 1154 if (FrameView* view = document->View()) | 1154 if (FrameView* view = document->View()) |
| 1155 view->InvalidateAllCustomScrollbarsOnActiveChanged(); | 1155 view->InvalidateAllCustomScrollbarsOnActiveChanged(); |
| 1156 ToLocalFrame(frame)->Selection().PageActivationChanged(); | 1156 ToLocalFrame(frame)->Selection().PageActivationChanged(); |
| 1157 } | 1157 } |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1410 it->FocusedFrameChanged(); | 1410 it->FocusedFrameChanged(); |
| 1411 } | 1411 } |
| 1412 | 1412 |
| 1413 DEFINE_TRACE(FocusController) { | 1413 DEFINE_TRACE(FocusController) { |
| 1414 visitor->Trace(page_); | 1414 visitor->Trace(page_); |
| 1415 visitor->Trace(focused_frame_); | 1415 visitor->Trace(focused_frame_); |
| 1416 visitor->Trace(focus_changed_observers_); | 1416 visitor->Trace(focus_changed_observers_); |
| 1417 } | 1417 } |
| 1418 | 1418 |
| 1419 } // namespace blink | 1419 } // namespace blink |
| OLD | NEW |