Index: third_party/WebKit/Source/modules/accessibility/AXObject.cpp |
diff --git a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp |
index 2e9b20e6a8035cd0d300595e0428bb40c482abc3..f9b6910d5f4f512ca418cd472eae3c68b19772ad 100644 |
--- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp |
+++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp |
@@ -536,10 +536,15 @@ bool AXObject::computeIsInertOrAriaHidden( |
ignoredReasons->push_back( |
IgnoredReason(AXActiveModalDialog, dialogObject)); |
else |
- ignoredReasons->push_back(IgnoredReason(AXInert)); |
+ ignoredReasons->push_back(IgnoredReason(AXInertElement)); |
} else { |
- // TODO(aboxhall): handle inert attribute if it eventuates |
- ignoredReasons->push_back(IgnoredReason(AXInert)); |
+ const AXObject* inertRootEl = inertRoot(); |
esprehn
2017/02/15 01:40:47
don't abbreviate, intertRoot = this->inertRoot()
aboxhall
2017/02/15 02:06:16
Done.
|
+ if (inertRootEl == this) { |
+ ignoredReasons->push_back(IgnoredReason(AXInertElement)); |
+ } else { |
+ ignoredReasons->push_back( |
+ IgnoredReason(AXInertSubtree, inertRootEl)); |
+ } |
} |
} |
return true; |
@@ -556,10 +561,12 @@ bool AXObject::computeIsInertOrAriaHidden( |
const AXObject* hiddenRoot = ariaHiddenRoot(); |
if (hiddenRoot) { |
if (ignoredReasons) { |
- if (hiddenRoot == this) |
- ignoredReasons->push_back(IgnoredReason(AXAriaHidden)); |
- else |
- ignoredReasons->push_back(IgnoredReason(AXAriaHiddenRoot, hiddenRoot)); |
+ if (hiddenRoot == this) { |
+ ignoredReasons->push_back(IgnoredReason(AXAriaHiddenElement)); |
+ } else { |
+ ignoredReasons->push_back( |
+ IgnoredReason(AXAriaHiddenSubtree, hiddenRoot)); |
+ } |
} |
return true; |
} |
@@ -592,6 +599,24 @@ const AXObject* AXObject::ariaHiddenRoot() const { |
return 0; |
} |
+const AXObject* AXObject::inertRoot() const { |
+ const AXObject* object = this; |
+ if (!RuntimeEnabledFeatures::inertAttributeEnabled()) |
+ return 0; |
esprehn
2017/02/15 01:40:47
nullptr
aboxhall
2017/02/15 02:06:16
Done.
|
+ |
+ while (object && !object->isAXNodeObject()) |
+ object = object->parentObject(); |
+ for (Node* node = object->getNode(); node; |
+ node = FlatTreeTraversal::parentElement(*node)) { |
+ if (!node->isElementNode()) |
esprehn
2017/02/15 01:40:47
This is definitely weird since it's doing parentEl
aboxhall
2017/02/15 02:06:16
Acknowledged.
|
+ continue; |
+ if (toElement(node)->hasAttribute(inertAttr)) |
+ return axObjectCache().getOrCreate(node); |
+ } |
+ |
+ return 0; |
esprehn
2017/02/15 01:40:47
ditto
aboxhall
2017/02/15 02:06:16
Done.
|
+} |
+ |
bool AXObject::isDescendantOfDisabledNode() const { |
updateCachedAttributeValuesIfNeeded(); |
return m_cachedIsDescendantOfDisabledNode; |