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

Side by Side Diff: Source/core/dom/Element.cpp

Issue 810493003: Introduce "navigation target classification" for spatial navigation Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 11 months 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Peter Kelly (pmk@post.com) 4 * (C) 2001 Peter Kelly (pmk@post.com)
5 * (C) 2001 Dirk Mueller (mueller@kde.org) 5 * (C) 2001 Dirk Mueller (mueller@kde.org)
6 * (C) 2007 David Smith (catfish.man@gmail.com) 6 * (C) 2007 David Smith (catfish.man@gmail.com)
7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved. 7 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012, 2013 Apple Inc. All rights reserved.
8 * (C) 2007 Eric Seidel (eric@webkit.org) 8 * (C) 2007 Eric Seidel (eric@webkit.org)
9 * 9 *
10 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 #include "core/html/HTMLPlugInElement.h" 101 #include "core/html/HTMLPlugInElement.h"
102 #include "core/html/HTMLTableRowsCollection.h" 102 #include "core/html/HTMLTableRowsCollection.h"
103 #include "core/html/HTMLTemplateElement.h" 103 #include "core/html/HTMLTemplateElement.h"
104 #include "core/html/parser/HTMLParserIdioms.h" 104 #include "core/html/parser/HTMLParserIdioms.h"
105 #include "core/inspector/InspectorInstrumentation.h" 105 #include "core/inspector/InspectorInstrumentation.h"
106 #include "core/page/Chrome.h" 106 #include "core/page/Chrome.h"
107 #include "core/page/ChromeClient.h" 107 #include "core/page/ChromeClient.h"
108 #include "core/page/FocusController.h" 108 #include "core/page/FocusController.h"
109 #include "core/page/Page.h" 109 #include "core/page/Page.h"
110 #include "core/page/PointerLockController.h" 110 #include "core/page/PointerLockController.h"
111 #include "core/page/SpatialNavigation.h"
112 #include "core/rendering/RenderLayer.h" 111 #include "core/rendering/RenderLayer.h"
113 #include "core/rendering/RenderTextFragment.h" 112 #include "core/rendering/RenderTextFragment.h"
114 #include "core/rendering/RenderView.h" 113 #include "core/rendering/RenderView.h"
115 #include "core/rendering/compositing/RenderLayerCompositor.h" 114 #include "core/rendering/compositing/RenderLayerCompositor.h"
116 #include "core/svg/SVGDocumentExtensions.h" 115 #include "core/svg/SVGDocumentExtensions.h"
117 #include "core/svg/SVGElement.h" 116 #include "core/svg/SVGElement.h"
118 #include "platform/EventDispatchForbiddenScope.h" 117 #include "platform/EventDispatchForbiddenScope.h"
119 #include "platform/RuntimeEnabledFeatures.h" 118 #include "platform/RuntimeEnabledFeatures.h"
120 #include "platform/UserGestureIndicator.h" 119 #include "platform/UserGestureIndicator.h"
121 #include "platform/scroll/ScrollableArea.h" 120 #include "platform/scroll/ScrollableArea.h"
(...skipping 2091 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 } 2212 }
2214 } 2213 }
2215 2214
2216 bool Element::supportsFocus() const 2215 bool Element::supportsFocus() const
2217 { 2216 {
2218 // FIXME: supportsFocus() can be called when layout is not up to date. 2217 // FIXME: supportsFocus() can be called when layout is not up to date.
2219 // Logic that deals with the renderer should be moved to rendererIsFocusable (). 2218 // Logic that deals with the renderer should be moved to rendererIsFocusable ().
2220 // But supportsFocus must return true when the element is editable, or else 2219 // But supportsFocus must return true when the element is editable, or else
2221 // it won't be focusable. Furthermore, supportsFocus cannot just return true 2220 // it won't be focusable. Furthermore, supportsFocus cannot just return true
2222 // always or else tabIndex() will change for all HTML elements. 2221 // always or else tabIndex() will change for all HTML elements.
2223 return hasElementFlag(TabIndexWasSetExplicitly) || (hasEditableStyle() && pa rentNode() && !parentNode()->hasEditableStyle()) 2222 return hasElementFlag(TabIndexWasSetExplicitly) || (hasEditableStyle() && pa rentNode() && !parentNode()->hasEditableStyle());
2224 || supportsSpatialNavigationFocus();
2225 }
2226
2227 bool Element::supportsSpatialNavigationFocus() const
2228 {
2229 // This function checks whether the element satisfies the extended criteria
2230 // for the element to be focusable, introduced by spatial navigation feature ,
2231 // i.e. checks if click or keyboard event handler is specified.
2232 // This is the way to make it possible to navigate to (focus) elements
2233 // which web designer meant for being active (made them respond to click eve nts).
2234
2235 if (!isSpatialNavigationEnabled(document().frame()))
2236 return false;
2237 if (hasEventListeners(EventTypeNames::click)
2238 || hasEventListeners(EventTypeNames::keydown)
2239 || hasEventListeners(EventTypeNames::keypress)
2240 || hasEventListeners(EventTypeNames::keyup))
2241 return true;
2242 if (!isSVGElement())
2243 return false;
2244 return (hasEventListeners(EventTypeNames::focus)
2245 || hasEventListeners(EventTypeNames::blur)
2246 || hasEventListeners(EventTypeNames::focusin)
2247 || hasEventListeners(EventTypeNames::focusout));
2248 } 2223 }
2249 2224
2250 bool Element::isFocusable() const 2225 bool Element::isFocusable() const
2251 { 2226 {
2252 return inDocument() && supportsFocus() && !isInert() && rendererIsFocusable( ); 2227 return inDocument() && supportsFocus() && !isInert() && rendererIsFocusable( );
2253 } 2228 }
2254 2229
2255 bool Element::isKeyboardFocusable() const 2230 bool Element::isKeyboardFocusable() const
2256 { 2231 {
2257 return isFocusable() && tabIndex() >= 0; 2232 return isFocusable() && tabIndex() >= 0;
(...skipping 1163 matching lines...) Expand 10 before | Expand all | Expand 10 after
3421 return wrapper; 3396 return wrapper;
3422 3397
3423 CustomElementBinding* binding = perContextData->customElementBinding(customE lementDefinition()); 3398 CustomElementBinding* binding = perContextData->customElementBinding(customE lementDefinition());
3424 3399
3425 wrapper->SetPrototype(binding->prototype()); 3400 wrapper->SetPrototype(binding->prototype());
3426 3401
3427 return V8DOMWrapper::associateObjectWithWrapper(isolate, this, wrapperType, wrapper); 3402 return V8DOMWrapper::associateObjectWithWrapper(isolate, this, wrapperType, wrapper);
3428 } 3403 }
3429 3404
3430 } // namespace blink 3405 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698