Chromium Code Reviews| 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 * Copyright (C) 2013 Opera Software ASA. All rights reserved. | |
| 4 * | 5 * |
| 5 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 7 * are met: | 8 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 11 * 2. Redistributions in binary form must reproduce the above copyright |
| 11 * notice, this list of conditions and the following disclaimer in the | 12 * notice, this list of conditions and the following disclaimer in the |
| 12 * documentation and/or other materials provided with the distribution. | 13 * documentation and/or other materials provided with the distribution. |
| 13 * | 14 * |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 50 #include "core/html/HTMLShadowElement.h" | 51 #include "core/html/HTMLShadowElement.h" |
| 51 #include "core/page/Chrome.h" | 52 #include "core/page/Chrome.h" |
| 52 #include "core/page/ChromeClient.h" | 53 #include "core/page/ChromeClient.h" |
| 53 #include "core/page/EventHandler.h" | 54 #include "core/page/EventHandler.h" |
| 54 #include "core/page/FrameTree.h" | 55 #include "core/page/FrameTree.h" |
| 55 #include "core/page/Page.h" | 56 #include "core/page/Page.h" |
| 56 #include "core/frame/Settings.h" | 57 #include "core/frame/Settings.h" |
| 57 #include "core/page/SpatialNavigation.h" | 58 #include "core/page/SpatialNavigation.h" |
| 58 #include "core/rendering/HitTestResult.h" | 59 #include "core/rendering/HitTestResult.h" |
| 59 #include "core/rendering/RenderLayer.h" | 60 #include "core/rendering/RenderLayer.h" |
| 61 #include "core/rendering/RenderObject.h" | |
| 62 #include "core/rendering/style/StyleNavigationValue.h" | |
| 60 | 63 |
| 61 namespace WebCore { | 64 namespace WebCore { |
| 62 | 65 |
| 63 using namespace HTMLNames; | 66 using namespace HTMLNames; |
| 64 | 67 |
| 65 static inline bool isShadowInsertionPointFocusScopeOwner(Node& node) | 68 static inline bool isShadowInsertionPointFocusScopeOwner(Node& node) |
| 66 { | 69 { |
| 67 return isActiveShadowInsertionPoint(node) && toHTMLShadowElement(node).older ShadowRoot(); | 70 return isActiveShadowInsertionPoint(node) && toHTMLShadowElement(node).older ShadowRoot(); |
| 68 } | 71 } |
| 69 | 72 |
| (...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 912 consumed = advanceFocusDirectionallyInContainer(container, startingRect, type); | 915 consumed = advanceFocusDirectionallyInContainer(container, startingRect, type); |
| 913 startingRect = nodeRectInAbsoluteCoordinates(container, true /* ignore b order */); | 916 startingRect = nodeRectInAbsoluteCoordinates(container, true /* ignore b order */); |
| 914 container = scrollableEnclosingBoxOrParentFrameForNodeInDirection(type, container); | 917 container = scrollableEnclosingBoxOrParentFrameForNodeInDirection(type, container); |
| 915 if (container && container->isDocumentNode()) | 918 if (container && container->isDocumentNode()) |
| 916 toDocument(container)->updateLayoutIgnorePendingStylesheets(); | 919 toDocument(container)->updateLayoutIgnorePendingStylesheets(); |
| 917 } while (!consumed && container); | 920 } while (!consumed && container); |
| 918 | 921 |
| 919 return consumed; | 922 return consumed; |
| 920 } | 923 } |
| 921 | 924 |
| 925 bool FocusController::handleCSSFocusNavigation(FocusType type) | |
| 926 { | |
| 927 DEFINE_STATIC_LOCAL(AtomicString, Current, ("current")); | |
|
fs
2014/04/14 12:32:01
Maybe make this 'targetCurrent' or 'frameTargetCur
Krzysztof Olczyk
2014/04/17 13:48:40
Done.
| |
| 928 DEFINE_STATIC_LOCAL(AtomicString, Root, ("root")); | |
| 929 | |
| 930 if (!focusedOrMainFrame()->isLocalFrame()) | |
| 931 return false; | |
| 932 | |
| 933 LocalFrame* currentFrame = toLocalFrame(focusedOrMainFrame()); | |
| 934 ASSERT(currentFrame); | |
|
fs
2014/04/14 12:32:01
Already dereference focusedOrMainFrame() above.
Krzysztof Olczyk
2014/04/17 13:48:40
Done.
| |
| 935 | |
| 936 Document* focusedDocument = currentFrame->document(); | |
| 937 if (!focusedDocument) | |
| 938 return false; | |
| 939 | |
| 940 Element* focused = focusedDocument->focusedElement(); | |
| 941 RenderObject* renderer = focused ? focused->renderer() : 0; | |
| 942 if (!renderer) | |
| 943 return false; | |
| 944 | |
| 945 StyleNavigationValue value; | |
| 946 | |
| 947 if (StyleNavigationData* navigationData = renderer->style()->navigation()) { | |
| 948 switch (type) { | |
| 949 case FocusTypeForward: | |
| 950 case FocusTypeBackward: | |
| 951 return false; | |
| 952 case FocusTypeUp: | |
| 953 value = navigationData->up(); | |
| 954 break; | |
| 955 case FocusTypeDown: | |
| 956 value = navigationData->down(); | |
| 957 break; | |
| 958 case FocusTypeLeft: | |
| 959 value = navigationData->left(); | |
| 960 break; | |
| 961 case FocusTypeRight: | |
| 962 value = navigationData->right(); | |
| 963 break; | |
| 964 case FocusTypeNone: | |
| 965 default: | |
| 966 ASSERT_NOT_REACHED(); | |
| 967 break; | |
| 968 } | |
| 969 } | |
| 970 | |
| 971 if (value.id().isNull() || value.isAuto()) | |
|
fs
2014/04/14 12:32:01
When will id() be the nullAtom?
Krzysztof Olczyk
2014/04/17 13:48:40
Done.
| |
| 972 return false; | |
| 973 | |
| 974 const AtomicString& target = value.target(); | |
| 975 Frame* targetFrame = 0; | |
| 976 | |
| 977 // If we were in the autoscroll/panScroll mode we want to stop it. | |
| 978 currentFrame->eventHandler().stopAutoscroll(); | |
| 979 | |
| 980 if (target == Current) | |
| 981 targetFrame = currentFrame; | |
| 982 else if (target == Root) | |
| 983 targetFrame = currentFrame->tree().top(); | |
| 984 else | |
| 985 targetFrame = currentFrame->tree().find(target); | |
| 986 | |
| 987 if (!targetFrame) | |
| 988 return false; | |
| 989 | |
| 990 Element* targetElement = targetFrame->document()->getElementById(value.id()) ; | |
| 991 | |
| 992 if (!targetElement) | |
| 993 return false; | |
| 994 // If it's same with the current focused, it should be consumed. | |
|
fs
2014/04/14 12:32:01
s/same with the current/the same as the currently/
Krzysztof Olczyk
2014/04/17 13:48:40
Done.
| |
| 995 if (focused == targetElement) | |
| 996 return true; | |
| 997 | |
| 998 return setFocusedElement(targetElement, targetFrame); | |
| 999 } | |
| 1000 | |
| 922 } // namespace WebCore | 1001 } // namespace WebCore |
| OLD | NEW |