Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008, 2009, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008, 2009, 2011 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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 129 } | 129 } |
| 130 | 130 |
| 131 AXObject::AXObject() | 131 AXObject::AXObject() |
| 132 : m_id(0) | 132 : m_id(0) |
| 133 , m_haveChildren(false) | 133 , m_haveChildren(false) |
| 134 , m_role(UnknownRole) | 134 , m_role(UnknownRole) |
| 135 , m_lastKnownIsIgnoredValue(DefaultBehavior) | 135 , m_lastKnownIsIgnoredValue(DefaultBehavior) |
| 136 , m_detached(false) | 136 , m_detached(false) |
| 137 , m_lastModificationCount(-1) | 137 , m_lastModificationCount(-1) |
| 138 , m_cachedIsIgnored(false) | 138 , m_cachedIsIgnored(false) |
| 139 , m_cachedLiveRegionRoot(0) | |
| 139 { | 140 { |
| 140 } | 141 } |
| 141 | 142 |
| 142 AXObject::~AXObject() | 143 AXObject::~AXObject() |
| 143 { | 144 { |
| 144 ASSERT(isDetached()); | 145 ASSERT(isDetached()); |
| 145 } | 146 } |
| 146 | 147 |
| 147 void AXObject::detach() | 148 void AXObject::detach() |
| 148 { | 149 { |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 256 | 257 |
| 257 void AXObject::updateCachedAttributeValuesIfNeeded() const | 258 void AXObject::updateCachedAttributeValuesIfNeeded() const |
| 258 { | 259 { |
| 259 AXObjectCacheImpl* cache = axObjectCache(); | 260 AXObjectCacheImpl* cache = axObjectCache(); |
| 260 if (!cache) | 261 if (!cache) |
| 261 return; | 262 return; |
| 262 | 263 |
| 263 if (cache->modificationCount() == m_lastModificationCount) | 264 if (cache->modificationCount() == m_lastModificationCount) |
| 264 return; | 265 return; |
| 265 | 266 |
| 267 m_lastModificationCount = cache->modificationCount(); | |
| 266 m_cachedIsIgnored = computeAccessibilityIsIgnored(); | 268 m_cachedIsIgnored = computeAccessibilityIsIgnored(); |
| 267 m_lastModificationCount = cache->modificationCount(); | 269 m_cachedLiveRegionRoot = isLiveRegion() ? this : (parentObjectIfExists() ? p arentObjectIfExists()->liveRegionRoot() : 0); |
|
aboxhall
2014/10/27 17:29:53
I'd consider wrapping this onto a few lines to mak
dmazzoni
2014/10/27 18:08:25
Done.
| |
| 268 } | 270 } |
| 269 | 271 |
| 270 bool AXObject::accessibilityIsIgnoredByDefault() const | 272 bool AXObject::accessibilityIsIgnoredByDefault() const |
| 271 { | 273 { |
| 272 return defaultObjectInclusion() == IgnoreObject; | 274 return defaultObjectInclusion() == IgnoreObject; |
| 273 } | 275 } |
| 274 | 276 |
| 275 AXObjectInclusion AXObject::accessibilityPlatformIncludesObject() const | 277 AXObjectInclusion AXObject::accessibilityPlatformIncludesObject() const |
| 276 { | 278 { |
| 277 if (isMenuListPopup() || isMenuListOption()) | 279 if (isMenuListPopup() || isMenuListOption()) |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 385 return equalIgnoringCase(getAttribute(aria_multilineAttr), "true"); | 387 return equalIgnoringCase(getAttribute(aria_multilineAttr), "true"); |
| 386 } | 388 } |
| 387 | 389 |
| 388 bool AXObject::ariaPressedIsPresent() const | 390 bool AXObject::ariaPressedIsPresent() const |
| 389 { | 391 { |
| 390 return !getAttribute(aria_pressedAttr).isEmpty(); | 392 return !getAttribute(aria_pressedAttr).isEmpty(); |
| 391 } | 393 } |
| 392 | 394 |
| 393 bool AXObject::supportsARIAAttributes() const | 395 bool AXObject::supportsARIAAttributes() const |
| 394 { | 396 { |
| 395 return supportsARIALiveRegion() | 397 return isLiveRegion() |
| 396 || supportsARIADragging() | 398 || supportsARIADragging() |
| 397 || supportsARIADropping() | 399 || supportsARIADropping() |
| 398 || supportsARIAFlowTo() | 400 || supportsARIAFlowTo() |
| 399 || supportsARIAOwns() | 401 || supportsARIAOwns() |
| 400 || hasAttribute(aria_labelAttr); | 402 || hasAttribute(aria_labelAttr); |
| 401 } | 403 } |
| 402 | 404 |
| 403 bool AXObject::supportsRangeValue() const | 405 bool AXObject::supportsRangeValue() const |
| 404 { | 406 { |
| 405 return isProgressIndicator() | 407 return isProgressIndicator() |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 417 | 419 |
| 418 // Add tree items as the rows. | 420 // Add tree items as the rows. |
| 419 if (obj->roleValue() == TreeItemRole) | 421 if (obj->roleValue() == TreeItemRole) |
| 420 result.append(obj); | 422 result.append(obj); |
| 421 | 423 |
| 422 // Now see if this item also has rows hiding inside of it. | 424 // Now see if this item also has rows hiding inside of it. |
| 423 obj->ariaTreeRows(result); | 425 obj->ariaTreeRows(result); |
| 424 } | 426 } |
| 425 } | 427 } |
| 426 | 428 |
| 427 bool AXObject::supportsARIALiveRegion() const | 429 bool AXObject::isLiveRegion() const |
| 428 { | 430 { |
| 429 const AtomicString& liveRegion = ariaLiveRegionStatus(); | 431 const AtomicString& liveRegion = liveRegionStatus(); |
| 430 return equalIgnoringCase(liveRegion, "polite") || equalIgnoringCase(liveRegi on, "assertive"); | 432 return equalIgnoringCase(liveRegion, "polite") || equalIgnoringCase(liveRegi on, "assertive"); |
| 431 } | 433 } |
| 432 | 434 |
| 435 const AXObject* AXObject::liveRegionRoot() const | |
| 436 { | |
| 437 updateCachedAttributeValuesIfNeeded(); | |
| 438 return m_cachedLiveRegionRoot; | |
| 439 } | |
| 440 | |
| 441 const AtomicString& AXObject::containerLiveRegionStatus() const | |
| 442 { | |
| 443 updateCachedAttributeValuesIfNeeded(); | |
| 444 return m_cachedLiveRegionRoot ? m_cachedLiveRegionRoot->liveRegionStatus() : nullAtom; | |
| 445 } | |
| 446 | |
| 447 const AtomicString& AXObject::containerLiveRegionRelevant() const | |
| 448 { | |
| 449 updateCachedAttributeValuesIfNeeded(); | |
| 450 return m_cachedLiveRegionRoot ? m_cachedLiveRegionRoot->liveRegionRelevant() : nullAtom; | |
| 451 } | |
| 452 | |
| 453 bool AXObject::containerLiveRegionAtomic() const | |
| 454 { | |
| 455 updateCachedAttributeValuesIfNeeded(); | |
| 456 return m_cachedLiveRegionRoot ? m_cachedLiveRegionRoot->liveRegionAtomic() : false; | |
| 457 } | |
| 458 | |
| 459 bool AXObject::containerLiveRegionBusy() const | |
| 460 { | |
| 461 updateCachedAttributeValuesIfNeeded(); | |
| 462 return m_cachedLiveRegionRoot ? m_cachedLiveRegionRoot->liveRegionBusy() : f alse; | |
| 463 } | |
| 464 | |
| 433 void AXObject::markCachedElementRectDirty() const | 465 void AXObject::markCachedElementRectDirty() const |
| 434 { | 466 { |
| 435 for (unsigned i = 0; i < m_children.size(); ++i) | 467 for (unsigned i = 0; i < m_children.size(); ++i) |
| 436 m_children[i].get()->markCachedElementRectDirty(); | 468 m_children[i].get()->markCachedElementRectDirty(); |
| 437 } | 469 } |
| 438 | 470 |
| 439 IntPoint AXObject::clickPoint() | 471 IntPoint AXObject::clickPoint() |
| 440 { | 472 { |
| 441 LayoutRect rect = elementRect(); | 473 LayoutRect rect = elementRect(); |
| 442 return roundedIntPoint(LayoutPoint(rect.x() + rect.width() / 2, rect.y() + r ect.height() / 2)); | 474 return roundedIntPoint(LayoutPoint(rect.x() + rect.width() / 2, rect.y() + r ect.height() / 2)); |
| (...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 910 return ToggleButtonRole; | 942 return ToggleButtonRole; |
| 911 if (ariaHasPopup()) | 943 if (ariaHasPopup()) |
| 912 return PopUpButtonRole; | 944 return PopUpButtonRole; |
| 913 // We don't contemplate RadioButtonRole, as it depends on the input | 945 // We don't contemplate RadioButtonRole, as it depends on the input |
| 914 // type. | 946 // type. |
| 915 | 947 |
| 916 return ButtonRole; | 948 return ButtonRole; |
| 917 } | 949 } |
| 918 | 950 |
| 919 } // namespace blink | 951 } // namespace blink |
| OLD | NEW |