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

Side by Side Diff: Source/modules/accessibility/AXLayoutObject.cpp

Issue 1012383002: Removes direct checking node on AXLayoutObject::determineAccessibilityRole. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Update nits Created 5 years, 8 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
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 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 275
276 Node* node = m_layoutObject->node(); 276 Node* node = m_layoutObject->node();
277 LayoutBoxModelObject* cssBox = layoutBoxModelObject(); 277 LayoutBoxModelObject* cssBox = layoutBoxModelObject();
278 278
279 if ((cssBox && cssBox->isListItem()) || isHTMLLIElement(node)) 279 if ((cssBox && cssBox->isListItem()) || isHTMLLIElement(node))
280 return ListItemRole; 280 return ListItemRole;
281 if (m_layoutObject->isListMarker()) 281 if (m_layoutObject->isListMarker())
282 return ListMarkerRole; 282 return ListMarkerRole;
283 if (m_layoutObject->isBR()) 283 if (m_layoutObject->isBR())
284 return LineBreakRole; 284 return LineBreakRole;
285 if (isHTMLLegendElement(node))
286 return LegendRole;
287 if (m_layoutObject->isText()) 285 if (m_layoutObject->isText())
288 return StaticTextRole; 286 return StaticTextRole;
289 if (cssBox && isImageOrAltText(cssBox, node)) { 287 if (cssBox && isImageOrAltText(cssBox, node)) {
290 if (node && node->isLink()) 288 if (node && node->isLink())
291 return ImageMapRole; 289 return ImageMapRole;
292 if (isHTMLInputElement(node)) 290 if (isHTMLInputElement(node))
293 return ariaHasPopup() ? PopUpButtonRole : ButtonRole; 291 return ariaHasPopup() ? PopUpButtonRole : ButtonRole;
294 if (isSVGImage()) 292 if (isSVGImage())
295 return SVGRootRole; 293 return SVGRootRole;
296 return ImageRole; 294 return ImageRole;
297 } 295 }
298 // Note: if JavaScript is disabled, the layoutObject won't be a LayoutHTMLCa nvas. 296 // Note: if JavaScript is disabled, the layoutObject won't be a LayoutHTMLCa nvas.
299 if (isHTMLCanvasElement(node) && m_layoutObject->isCanvas()) 297 if (isHTMLCanvasElement(node) && m_layoutObject->isCanvas())
300 return CanvasRole; 298 return CanvasRole;
301 299
302 if (cssBox && cssBox->isLayoutView()) 300 if (cssBox && cssBox->isLayoutView())
303 return WebAreaRole; 301 return WebAreaRole;
304 302
305 if (m_layoutObject->isSVGImage()) 303 if (m_layoutObject->isSVGImage())
306 return ImageRole; 304 return ImageRole;
307 if (m_layoutObject->isSVGRoot()) 305 if (m_layoutObject->isSVGRoot())
308 return SVGRootRole; 306 return SVGRootRole;
309 307
310 if (node && node->hasTagName(ddTag))
311 return DescriptionListDetailRole;
312
313 if (node && node->hasTagName(dtTag))
314 return DescriptionListTermRole;
315
316 if (node && (node->nodeName() == "math"))
317 return MathRole;
318
319 if (node && (node->hasTagName(rpTag) || node->hasTagName(rtTag)))
320 return AnnotationRole;
321
322 // Table sections should be ignored. 308 // Table sections should be ignored.
323 if (m_layoutObject->isTableSection()) 309 if (m_layoutObject->isTableSection())
324 return IgnoredRole; 310 return IgnoredRole;
325 311
326 if (m_layoutObject->isHR()) 312 if (m_layoutObject->isHR())
327 return SplitterRole; 313 return SplitterRole;
328 314
329 if (isHTMLFormElement(node))
330 return FormRole;
331
332 if (node && node->hasTagName(articleTag))
333 return ArticleRole;
334
335 if (node && node->hasTagName(mainTag))
336 return MainRole;
337
338 if (node && node->hasTagName(navTag))
339 return NavigationRole;
340
341 if (node && node->hasTagName(asideTag))
342 return ComplementaryRole;
343
344 if (node && node->hasTagName(preTag))
345 return PreRole;
346
347 if (node && node->hasTagName(sectionTag))
348 return RegionRole;
349
350 if (node && node->hasTagName(addressTag))
351 return ContentInfoRole;
352
353 if (node && node->hasTagName(dialogTag))
354 return DialogRole;
355
356 // The HTML element should not be exposed as an element. That's what the Lay outView element does.
357 if (isHTMLHtmlElement(node))
358 return IgnoredRole;
359
360 if (node && node->hasTagName(iframeTag)) {
361 const AtomicString& ariaRole = getAttribute(roleAttr);
362 if (ariaRole == "none" || ariaRole == "presentation")
363 return IframePresentationalRole;
364 return IframeRole;
365 }
366
367 // There should only be one banner/contentInfo per page. If header/footer ar e being used within an article or section
368 // then it should not be exposed as whole page's banner/contentInfo
369 if (node && node->hasTagName(headerTag) && !isDescendantOfElementType(articl eTag) && !isDescendantOfElementType(sectionTag))
370 return BannerRole;
371 if (node && node->hasTagName(footerTag) && !isDescendantOfElementType(articl eTag) && !isDescendantOfElementType(sectionTag))
372 return FooterRole;
373
374 AccessibilityRole role = AXNodeObject::determineAccessibilityRoleUtil(); 315 AccessibilityRole role = AXNodeObject::determineAccessibilityRoleUtil();
375 if (role != UnknownRole) 316 if (role != UnknownRole)
376 return role; 317 return role;
377 318
378 if (m_layoutObject->isLayoutBlockFlow()) 319 if (m_layoutObject->isLayoutBlockFlow())
379 return GroupRole; 320 return GroupRole;
380 321
381 // If the element does not have role, but it has ARIA attributes, accessibil ity should fallback to exposing it as a group. 322 // If the element does not have role, but it has ARIA attributes, accessibil ity should fallback to exposing it as a group.
382 if (supportsARIAAttributes()) 323 if (supportsARIAAttributes())
383 return GroupRole; 324 return GroupRole;
(...skipping 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after
2056 break; 1997 break;
2057 firstChild = newFirstChild; 1998 firstChild = newFirstChild;
2058 if (!firstChild->node()) 1999 if (!firstChild->node())
2059 break; 2000 break;
2060 } 2001 }
2061 } 2002 }
2062 2003
2063 return parent; 2004 return parent;
2064 } 2005 }
2065 2006
2066 bool AXLayoutObject::isDescendantOfElementType(const HTMLQualifiedName& tagName) const
2067 {
2068 for (LayoutObject* parent = m_layoutObject->parent(); parent; parent = paren t->parent()) {
2069 if (parent->node() && parent->node()->hasTagName(tagName))
2070 return true;
2071 }
2072 return false;
2073 }
2074
2075 bool AXLayoutObject::isSVGImage() const 2007 bool AXLayoutObject::isSVGImage() const
2076 { 2008 {
2077 return remoteSVGRootElement(); 2009 return remoteSVGRootElement();
2078 } 2010 }
2079 2011
2080 void AXLayoutObject::detachRemoteSVGRoot() 2012 void AXLayoutObject::detachRemoteSVGRoot()
2081 { 2013 {
2082 if (AXSVGRoot* root = remoteSVGRootElement()) 2014 if (AXSVGRoot* root = remoteSVGRootElement())
2083 root->setParent(0); 2015 root->setParent(0);
2084 } 2016 }
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
2336 if (label && label->layoutObject()) { 2268 if (label && label->layoutObject()) {
2337 LayoutRect labelRect = axObjectCache()->getOrCreate(label)->elementR ect(); 2269 LayoutRect labelRect = axObjectCache()->getOrCreate(label)->elementR ect();
2338 result.unite(labelRect); 2270 result.unite(labelRect);
2339 } 2271 }
2340 } 2272 }
2341 2273
2342 return result; 2274 return result;
2343 } 2275 }
2344 2276
2345 } // namespace blink 2277 } // namespace blink
OLDNEW
« no previous file with comments | « Source/modules/accessibility/AXLayoutObject.h ('k') | Source/modules/accessibility/AXNodeObject.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698