@@ -16,6 +16,8 @@ Accessibility.AXBreadcrumbsPane = class extends Accessibility.AccessibilitySubPa
1616
1717 /** @type {?Accessibility.AXBreadcrumb } */
1818 this . _preselectedBreadcrumb = null ;
19+ /** @type {?Accessibility.AXBreadcrumb } */
20+ this . _inspectedNodeBreadcrumb = null ;
1921
2022 this . _selectedByUser = true ;
2123
@@ -27,6 +29,7 @@ Accessibility.AXBreadcrumbsPane = class extends Accessibility.AccessibilitySubPa
2729 this . _rootElement . addEventListener ( 'mouseleave' , this . _onMouseLeave . bind ( this ) , false ) ;
2830 this . _rootElement . addEventListener ( 'click' , this . _onClick . bind ( this ) , false ) ;
2931 this . _rootElement . addEventListener ( 'contextmenu' , this . _contextMenuEventFired . bind ( this ) , false ) ;
32+ this . _rootElement . addEventListener ( 'focusout' , this . _onFocusOut . bind ( this ) , false ) ;
3033 this . registerRequiredCSS ( 'accessibility/axBreadcrumbs.css' ) ;
3134 }
3235
@@ -65,14 +68,14 @@ Accessibility.AXBreadcrumbsPane = class extends Accessibility.AccessibilitySubPa
6568 depth ++ ;
6669 }
6770
68- var inspectedNodeBreadcrumb = breadcrumb ;
69- inspectedNodeBreadcrumb . setPreselected ( true , this . _selectedByUser ) ;
71+ this . _inspectedNodeBreadcrumb = breadcrumb ;
72+ this . _inspectedNodeBreadcrumb . setPreselected ( true , this . _selectedByUser ) ;
7073
71- this . _setPreselectedBreadcrumb ( inspectedNodeBreadcrumb ) ;
74+ this . _setPreselectedBreadcrumb ( this . _inspectedNodeBreadcrumb ) ;
7275
7376 for ( var child of axNode . children ( ) ) {
7477 var childBreadcrumb = new Accessibility . AXBreadcrumb ( child , depth , false ) ;
75- inspectedNodeBreadcrumb . appendChild ( childBreadcrumb ) ;
78+ this . _inspectedNodeBreadcrumb . appendChild ( childBreadcrumb ) ;
7679 }
7780
7881 this . _selectedByUser = false ;
@@ -147,10 +150,12 @@ Accessibility.AXBreadcrumbsPane = class extends Accessibility.AccessibilitySubPa
147150 return ;
148151 if ( this . _preselectedBreadcrumb )
149152 this . _preselectedBreadcrumb . setPreselected ( false , this . _selectedByUser ) ;
150- this . _preselectedBreadcrumb = breadcrumb ;
151- if ( this . _preselectedBreadcrumb )
152- this . _preselectedBreadcrumb . setPreselected ( true , this . _selectedByUser ) ;
153- else if ( this . _selectedByUser )
153+ if ( breadcrumb )
154+ this . _preselectedBreadcrumb = breadcrumb ;
155+ else
156+ this . _preselectedBreadcrumb = this . _inspectedNodeBreadcrumb ;
157+ this . _preselectedBreadcrumb . setPreselected ( true , this . _selectedByUser ) ;
158+ if ( ! breadcrumb && this . _selectedByUser )
154159 SDK . OverlayModel . hideDOMNodeHighlight ( ) ;
155160 }
156161
@@ -171,11 +176,20 @@ Accessibility.AXBreadcrumbsPane = class extends Accessibility.AccessibilitySubPa
171176 return ;
172177 }
173178 var breadcrumb = breadcrumbElement . breadcrumb ;
174- if ( breadcrumb . preselected ( ) || breadcrumb . inspected ( ) || ! breadcrumb . isDOMNode ( ) )
179+ if ( ! breadcrumb . isDOMNode ( ) )
175180 return ;
176181 this . _setHoveredBreadcrumb ( breadcrumb ) ;
177182 }
178183
184+ /**
185+ * @param {!Event } event
186+ */
187+ _onFocusOut ( event ) {
188+ if ( ! this . _preselectedBreadcrumb || event . target !== this . _preselectedBreadcrumb . nodeElement ( ) )
189+ return ;
190+ this . _setPreselectedBreadcrumb ( null ) ;
191+ }
192+
179193 /**
180194 * @param {!Event } event
181195 */
@@ -189,7 +203,7 @@ Accessibility.AXBreadcrumbsPane = class extends Accessibility.AccessibilitySubPa
189203 if ( breadcrumb . inspected ( ) ) {
190204 // If the user is clicking the inspected breadcrumb, they probably want to
191205 // focus it.
192- breadcrumb . element ( ) . focus ( ) ;
206+ breadcrumb . nodeElement ( ) . focus ( ) ;
193207 return ;
194208 }
195209 if ( ! breadcrumb . isDOMNode ( ) )
@@ -228,15 +242,8 @@ Accessibility.AXBreadcrumbsPane = class extends Accessibility.AccessibilitySubPa
228242 this . _selectedByUser = true ;
229243
230244 axNode . deferredDOMNode ( ) . resolve ( domNode => {
231- var inspectedDOMNode = UI . context . flavor ( SDK . DOMNode ) ;
232- // Special case the root accessibility node: set the node for the
233- // accessibility panel, not the Elements tree, as it maps to the Document
234- // node which is not shown in the DOM panel, causing the first child to be
235- // inspected instead.
236- if ( axNode . parentNode ( ) && domNode !== inspectedDOMNode )
237- Common . Revealer . reveal ( domNode , true /* omitFocus */ ) ;
238- else
239- this . _axSidebarView . setNode ( domNode ) ;
245+ this . _axSidebarView . setNode ( domNode , true /* fromAXTree */ ) ;
246+ Common . Revealer . reveal ( domNode , true /* omitFocus */ ) ;
240247 } ) ;
241248
242249 return true ;
@@ -246,7 +253,7 @@ Accessibility.AXBreadcrumbsPane = class extends Accessibility.AccessibilitySubPa
246253 * @param {!Event } event
247254 */
248255 _contextMenuEventFired ( event ) {
249- var breadcrumbElement = event . target . enclosingNodeOrSelfWithClass ( 'ax-node ' ) ;
256+ var breadcrumbElement = event . target . enclosingNodeOrSelfWithClass ( 'ax-breadcrumb ' ) ;
250257 if ( ! breadcrumbElement )
251258 return ;
252259
@@ -279,10 +286,11 @@ Accessibility.AXBreadcrumb = class {
279286 this . _axNode = axNode ;
280287
281288 this . _element = createElementWithClass ( 'div' , 'ax-breadcrumb' ) ;
282- UI . ARIAUtils . markAsTreeitem ( this . _element ) ;
283289 this . _element . breadcrumb = this ;
284290
285291 this . _nodeElement = createElementWithClass ( 'div' , 'ax-node' ) ;
292+ UI . ARIAUtils . markAsTreeitem ( this . _nodeElement ) ;
293+ this . _nodeElement . tabIndex = - 1 ;
286294 this . _element . appendChild ( this . _nodeElement ) ;
287295 this . _nodeWrapper = createElementWithClass ( 'div' , 'wrapper' ) ;
288296 this . _nodeElement . appendChild ( this . _nodeWrapper ) ;
@@ -329,14 +337,21 @@ Accessibility.AXBreadcrumb = class {
329337 return this . _element ;
330338 }
331339
340+ /**
341+ * @return {!Element }
342+ */
343+ nodeElement ( ) {
344+ return this . _nodeElement ;
345+ }
346+
332347 /**
333348 * @param {!Accessibility.AXBreadcrumb } breadcrumb
334349 */
335350 appendChild ( breadcrumb ) {
336351 this . _children . push ( breadcrumb ) ;
337352 breadcrumb . setParent ( this ) ;
338353 this . _nodeElement . classList . add ( 'parent' ) ;
339- UI . ARIAUtils . setExpanded ( this . _element , true ) ;
354+ UI . ARIAUtils . setExpanded ( this . _nodeElement , true ) ;
340355 this . _childrenGroupElement . appendChild ( breadcrumb . element ( ) ) ;
341356 }
342357
@@ -366,7 +381,7 @@ Accessibility.AXBreadcrumb = class {
366381 if ( preselected )
367382 this . _nodeElement . setAttribute ( 'tabIndex' , 0 ) ;
368383 else
369- this . _nodeElement . removeAttribute ( 'tabIndex' ) ;
384+ this . _nodeElement . setAttribute ( 'tabIndex' , - 1 ) ;
370385 if ( this . _preselected ) {
371386 if ( selectedByUser )
372387 this . _nodeElement . focus ( ) ;
0 commit comments