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

Side by Side Diff: third_party/WebKit/Source/modules/accessibility/AXNodeObject.cpp

Issue 2804383002: Replace ASSERT with DCHECK in modules/accessibility (Closed)
Patch Set: Created 3 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) 2012, Google Inc. All rights reserved. 2 * Copyright (C) 2012, Google 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 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 m_childrenDirty(false), 220 m_childrenDirty(false),
221 m_node(node) { 221 m_node(node) {
222 } 222 }
223 223
224 AXNodeObject* AXNodeObject::create(Node* node, 224 AXNodeObject* AXNodeObject::create(Node* node,
225 AXObjectCacheImpl& axObjectCache) { 225 AXObjectCacheImpl& axObjectCache) {
226 return new AXNodeObject(node, axObjectCache); 226 return new AXNodeObject(node, axObjectCache);
227 } 227 }
228 228
229 AXNodeObject::~AXNodeObject() { 229 AXNodeObject::~AXNodeObject() {
230 ASSERT(!m_node); 230 DCHECK(!m_node);
231 } 231 }
232 232
233 void AXNodeObject::alterSliderValue(bool increase) { 233 void AXNodeObject::alterSliderValue(bool increase) {
234 if (roleValue() != SliderRole) 234 if (roleValue() != SliderRole)
235 return; 235 return;
236 236
237 float value = valueForRange(); 237 float value = valueForRange();
238 float step = stepValueForRange(); 238 float step = stepValueForRange();
239 239
240 value += increase ? step : -step; 240 value += increase ? step : -step;
(...skipping 20 matching lines...) Expand all
261 261
262 AXObject* axDescendant = axObjectCache().getOrCreate(descendant); 262 AXObject* axDescendant = axObjectCache().getOrCreate(descendant);
263 return axDescendant; 263 return axDescendant;
264 } 264 }
265 265
266 bool AXNodeObject::computeAccessibilityIsIgnored( 266 bool AXNodeObject::computeAccessibilityIsIgnored(
267 IgnoredReasons* ignoredReasons) const { 267 IgnoredReasons* ignoredReasons) const {
268 #if DCHECK_IS_ON() 268 #if DCHECK_IS_ON()
269 // Double-check that an AXObject is never accessed before 269 // Double-check that an AXObject is never accessed before
270 // it's been initialized. 270 // it's been initialized.
271 ASSERT(m_initialized); 271 DCHECK(m_initialized);
272 #endif 272 #endif
273 273
274 // If this element is within a parent that cannot have children, it should not 274 // If this element is within a parent that cannot have children, it should not
275 // be exposed. 275 // be exposed.
276 if (isDescendantOfLeafNode()) { 276 if (isDescendantOfLeafNode()) {
277 if (ignoredReasons) 277 if (ignoredReasons)
278 ignoredReasons->push_back( 278 ignoredReasons->push_back(
279 IgnoredReason(AXAncestorIsLeafNode, leafNodeAncestor())); 279 IgnoredReason(AXAncestorIsLeafNode, leafNodeAncestor()));
280 return true; 280 return true;
281 } 281 }
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after
897 // searching up the chain. 897 // searching up the chain.
898 if (parentAriaRole) 898 if (parentAriaRole)
899 break; 899 break;
900 } 900 }
901 901
902 return role; 902 return role;
903 } 903 }
904 904
905 void AXNodeObject::init() { 905 void AXNodeObject::init() {
906 #if DCHECK_IS_ON() 906 #if DCHECK_IS_ON()
907 ASSERT(!m_initialized); 907 DCHECK(!m_initialized);
908 m_initialized = true; 908 m_initialized = true;
909 #endif 909 #endif
910 m_role = determineAccessibilityRole(); 910 m_role = determineAccessibilityRole();
911 } 911 }
912 912
913 void AXNodeObject::detach() { 913 void AXNodeObject::detach() {
914 AXObject::detach(); 914 AXObject::detach();
915 m_node = nullptr; 915 m_node = nullptr;
916 } 916 }
917 917
(...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after
1869 1869
1870 String AXNodeObject::textAlternative(bool recursive, 1870 String AXNodeObject::textAlternative(bool recursive,
1871 bool inAriaLabelledByTraversal, 1871 bool inAriaLabelledByTraversal,
1872 AXObjectSet& visited, 1872 AXObjectSet& visited,
1873 AXNameFrom& nameFrom, 1873 AXNameFrom& nameFrom,
1874 AXRelatedObjectVector* relatedObjects, 1874 AXRelatedObjectVector* relatedObjects,
1875 NameSources* nameSources) const { 1875 NameSources* nameSources) const {
1876 // If nameSources is non-null, relatedObjects is used in filling it in, so it 1876 // If nameSources is non-null, relatedObjects is used in filling it in, so it
1877 // must be non-null as well. 1877 // must be non-null as well.
1878 if (nameSources) 1878 if (nameSources)
1879 ASSERT(relatedObjects); 1879 DCHECK(relatedObjects);
1880 1880
1881 bool foundTextAlternative = false; 1881 bool foundTextAlternative = false;
1882 1882
1883 if (!getNode() && !getLayoutObject()) 1883 if (!getNode() && !getLayoutObject())
1884 return String(); 1884 return String();
1885 1885
1886 String textAlternative = ariaTextAlternative( 1886 String textAlternative = ariaTextAlternative(
1887 recursive, inAriaLabelledByTraversal, visited, nameFrom, relatedObjects, 1887 recursive, inAriaLabelledByTraversal, visited, nameFrom, relatedObjects,
1888 nameSources, &foundTextAlternative); 1888 nameSources, &foundTextAlternative);
1889 if (foundTextAlternative && !nameSources) 1889 if (foundTextAlternative && !nameSources)
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
2156 if (isHTMLOptionElement(node)) 2156 if (isHTMLOptionElement(node))
2157 parentNode = toHTMLOptionElement(node)->ownerSelectElement(); 2157 parentNode = toHTMLOptionElement(node)->ownerSelectElement();
2158 2158
2159 if (!parentNode) 2159 if (!parentNode)
2160 parentNode = node->parentNode(); 2160 parentNode = node->parentNode();
2161 2161
2162 return parentNode; 2162 return parentNode;
2163 } 2163 }
2164 2164
2165 AXObject* AXNodeObject::computeParent() const { 2165 AXObject* AXNodeObject::computeParent() const {
2166 ASSERT(!isDetached()); 2166 DCHECK(!isDetached());
2167 if (Node* parentNode = getParentNodeForComputeParent(getNode())) 2167 if (Node* parentNode = getParentNodeForComputeParent(getNode()))
2168 return axObjectCache().getOrCreate(parentNode); 2168 return axObjectCache().getOrCreate(parentNode);
2169 2169
2170 return nullptr; 2170 return nullptr;
2171 } 2171 }
2172 2172
2173 AXObject* AXNodeObject::computeParentIfExists() const { 2173 AXObject* AXNodeObject::computeParentIfExists() const {
2174 if (Node* parentNode = getParentNodeForComputeParent(getNode())) 2174 if (Node* parentNode = getParentNodeForComputeParent(getNode()))
2175 return axObjectCache().get(parentNode); 2175 return axObjectCache().get(parentNode);
2176 2176
(...skipping 17 matching lines...) Expand all
2194 return 0; 2194 return 0;
2195 2195
2196 Node* nextSibling = getNode()->nextSibling(); 2196 Node* nextSibling = getNode()->nextSibling();
2197 if (!nextSibling) 2197 if (!nextSibling)
2198 return 0; 2198 return 0;
2199 2199
2200 return axObjectCache().getOrCreate(nextSibling); 2200 return axObjectCache().getOrCreate(nextSibling);
2201 } 2201 }
2202 2202
2203 void AXNodeObject::addChildren() { 2203 void AXNodeObject::addChildren() {
2204 ASSERT(!isDetached()); 2204 DCHECK(!isDetached());
2205 // If the need to add more children in addition to existing children arises, 2205 // If the need to add more children in addition to existing children arises,
2206 // childrenChanged should have been called, leaving the object with no 2206 // childrenChanged should have been called, leaving the object with no
2207 // children. 2207 // children.
2208 ASSERT(!m_haveChildren); 2208 DCHECK(!m_haveChildren);
2209 2209
2210 if (!m_node) 2210 if (!m_node)
2211 return; 2211 return;
2212 2212
2213 m_haveChildren = true; 2213 m_haveChildren = true;
2214 2214
2215 // The only time we add children from the DOM tree to a node with a 2215 // The only time we add children from the DOM tree to a node with a
2216 // layoutObject is when it's a canvas. 2216 // layoutObject is when it's a canvas.
2217 if (getLayoutObject() && !isHTMLCanvasElement(*m_node)) 2217 if (getLayoutObject() && !isHTMLCanvasElement(*m_node))
2218 return; 2218 return;
(...skipping 28 matching lines...) Expand all
2247 // aria-hidden changes from working correctly. Hence, whenever a parent is 2247 // aria-hidden changes from working correctly. Hence, whenever a parent is
2248 // getting children, ensure data is not stale. 2248 // getting children, ensure data is not stale.
2249 child->clearChildren(); 2249 child->clearChildren();
2250 2250
2251 if (child->accessibilityIsIgnored()) { 2251 if (child->accessibilityIsIgnored()) {
2252 const auto& children = child->children(); 2252 const auto& children = child->children();
2253 size_t length = children.size(); 2253 size_t length = children.size();
2254 for (size_t i = 0; i < length; ++i) 2254 for (size_t i = 0; i < length; ++i)
2255 m_children.insert(index + i, children[i]); 2255 m_children.insert(index + i, children[i]);
2256 } else { 2256 } else {
2257 ASSERT(child->parentObject() == this); 2257 DCHECK(child->parentObject() == this);
tkent 2017/04/09 23:21:23 Use DCHECK_EQ
2258 m_children.insert(index, child); 2258 m_children.insert(index, child);
2259 } 2259 }
2260 } 2260 }
2261 2261
2262 bool AXNodeObject::canHaveChildren() const { 2262 bool AXNodeObject::canHaveChildren() const {
2263 // If this is an AXLayoutObject, then it's okay if this object 2263 // If this is an AXLayoutObject, then it's okay if this object
2264 // doesn't have a node - there are some layoutObjects that don't have 2264 // doesn't have a node - there are some layoutObjects that don't have
2265 // associated nodes, like scroll areas and css-generated text. 2265 // associated nodes, like scroll areas and css-generated text.
2266 if (!getNode() && !isAXLayoutObject()) 2266 if (!getNode() && !isAXLayoutObject())
2267 return false; 2267 return false;
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
2564 AXNameFrom& nameFrom, 2564 AXNameFrom& nameFrom,
2565 AXRelatedObjectVector* relatedObjects, 2565 AXRelatedObjectVector* relatedObjects,
2566 NameSources* nameSources, 2566 NameSources* nameSources,
2567 bool* foundTextAlternative) const { 2567 bool* foundTextAlternative) const {
2568 if (!getNode()) 2568 if (!getNode())
2569 return String(); 2569 return String();
2570 2570
2571 // If nameSources is non-null, relatedObjects is used in filling it in, so it 2571 // If nameSources is non-null, relatedObjects is used in filling it in, so it
2572 // must be non-null as well. 2572 // must be non-null as well.
2573 if (nameSources) 2573 if (nameSources)
2574 ASSERT(relatedObjects); 2574 DCHECK(relatedObjects);
2575 2575
2576 String textAlternative; 2576 String textAlternative;
2577 AXRelatedObjectVector localRelatedObjects; 2577 AXRelatedObjectVector localRelatedObjects;
2578 2578
2579 const HTMLInputElement* inputElement = nullptr; 2579 const HTMLInputElement* inputElement = nullptr;
2580 if (isHTMLInputElement(getNode())) 2580 if (isHTMLInputElement(getNode()))
2581 inputElement = toHTMLInputElement(getNode()); 2581 inputElement = toHTMLInputElement(getNode());
2582 2582
2583 // 5.1/5.5 Text inputs, Other labelable Elements 2583 // 5.1/5.5 Text inputs, Other labelable Elements
2584 // If you change this logic, update AXNodeObject::nameFromLabelElement, too. 2584 // If you change this logic, update AXNodeObject::nameFromLabelElement, too.
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
2900 } 2900 }
2901 2901
2902 // Per SVG AAM 1.0's modifications to 2D of this algorithm. 2902 // Per SVG AAM 1.0's modifications to 2D of this algorithm.
2903 if (getNode()->isSVGElement()) { 2903 if (getNode()->isSVGElement()) {
2904 nameFrom = AXNameFromRelatedElement; 2904 nameFrom = AXNameFromRelatedElement;
2905 if (nameSources) { 2905 if (nameSources) {
2906 nameSources->push_back(NameSource(*foundTextAlternative)); 2906 nameSources->push_back(NameSource(*foundTextAlternative));
2907 nameSources->back().type = nameFrom; 2907 nameSources->back().type = nameFrom;
2908 nameSources->back().nativeSource = AXTextFromNativeHTMLTitleElement; 2908 nameSources->back().nativeSource = AXTextFromNativeHTMLTitleElement;
2909 } 2909 }
2910 ASSERT(getNode()->isContainerNode()); 2910 DCHECK(getNode()->isContainerNode());
2911 Element* title = ElementTraversal::firstChild( 2911 Element* title = ElementTraversal::firstChild(
2912 toContainerNode(*(getNode())), HasTagName(SVGNames::titleTag)); 2912 toContainerNode(*(getNode())), HasTagName(SVGNames::titleTag));
2913 2913
2914 if (title) { 2914 if (title) {
2915 AXObject* titleAXObject = axObjectCache().getOrCreate(title); 2915 AXObject* titleAXObject = axObjectCache().getOrCreate(title);
2916 if (titleAXObject && !visited.contains(titleAXObject)) { 2916 if (titleAXObject && !visited.contains(titleAXObject)) {
2917 textAlternative = 2917 textAlternative =
2918 recursiveTextAlternative(*titleAXObject, false, visited); 2918 recursiveTextAlternative(*titleAXObject, false, visited);
2919 if (relatedObjects) { 2919 if (relatedObjects) {
2920 localRelatedObjects.push_back( 2920 localRelatedObjects.push_back(
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
3047 3047
3048 // Based on 3048 // Based on
3049 // http://rawgit.com/w3c/aria/master/html-aam/html-aam.html#accessible-name-and- description-calculation 3049 // http://rawgit.com/w3c/aria/master/html-aam/html-aam.html#accessible-name-and- description-calculation
3050 String AXNodeObject::description(AXNameFrom nameFrom, 3050 String AXNodeObject::description(AXNameFrom nameFrom,
3051 AXDescriptionFrom& descriptionFrom, 3051 AXDescriptionFrom& descriptionFrom,
3052 DescriptionSources* descriptionSources, 3052 DescriptionSources* descriptionSources,
3053 AXRelatedObjectVector* relatedObjects) const { 3053 AXRelatedObjectVector* relatedObjects) const {
3054 // If descriptionSources is non-null, relatedObjects is used in filling it in, 3054 // If descriptionSources is non-null, relatedObjects is used in filling it in,
3055 // so it must be non-null as well. 3055 // so it must be non-null as well.
3056 if (descriptionSources) 3056 if (descriptionSources)
3057 ASSERT(relatedObjects); 3057 DCHECK(relatedObjects);
3058 3058
3059 if (!getNode()) 3059 if (!getNode())
3060 return String(); 3060 return String();
3061 3061
3062 String description; 3062 String description;
3063 bool foundDescription = false; 3063 bool foundDescription = false;
3064 3064
3065 descriptionFrom = AXDescriptionFromRelatedElement; 3065 descriptionFrom = AXDescriptionFromRelatedElement;
3066 if (descriptionSources) { 3066 if (descriptionSources) {
3067 descriptionSources->push_back( 3067 descriptionSources->push_back(
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
3261 return String(); 3261 return String();
3262 return toTextControlElement(node)->strippedPlaceholder(); 3262 return toTextControlElement(node)->strippedPlaceholder();
3263 } 3263 }
3264 3264
3265 DEFINE_TRACE(AXNodeObject) { 3265 DEFINE_TRACE(AXNodeObject) {
3266 visitor->trace(m_node); 3266 visitor->trace(m_node);
3267 AXObject::trace(visitor); 3267 AXObject::trace(visitor);
3268 } 3268 }
3269 3269
3270 } // namespace blink 3270 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698