| 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 8d63c1deefbc2c861232ce9c90c4efa39f7015e0..03c202e30312edf1d218bcda97bf1a3b4e16361b 100644
|
| --- a/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
|
| +++ b/third_party/WebKit/Source/modules/accessibility/AXObject.cpp
|
| @@ -29,6 +29,7 @@
|
| #include "modules/accessibility/AXObject.h"
|
|
|
| #include "SkMatrix44.h"
|
| +#include "base/debug/stack_trace.h"
|
| #include "core/InputTypeNames.h"
|
| #include "core/css/resolver/StyleResolver.h"
|
| #include "core/dom/AccessibleNode.h"
|
| @@ -533,7 +534,19 @@ bool AXObject::IsClickable() const {
|
| }
|
| }
|
|
|
| -bool AXObject::AccessibilityIsIgnored() const {
|
| +bool AXObject::AccessibilityIsIgnored() {
|
| + Document* document = GetDocument();
|
| + if (!document) {
|
| + LOG(INFO) << "no document";
|
| + }
|
| + while (document) {
|
| + document->UpdateDistribution();
|
| + if (!document->ownerDocument() && document->LocalOwner())
|
| + document = document->LocalOwner()->ownerDocument();
|
| + else
|
| + document = nullptr; // Only walk up the chain for <object>
|
| + }
|
| +
|
| UpdateCachedAttributeValuesIfNeeded();
|
| return cached_is_ignored_;
|
| }
|
| @@ -615,10 +628,15 @@ bool AXObject::ComputeIsInertOrAriaHidden(
|
| ignored_reasons->push_back(
|
| IgnoredReason(kAXActiveModalDialog, dialog_object));
|
| else
|
| - ignored_reasons->push_back(IgnoredReason(kAXInert));
|
| + ignored_reasons->push_back(IgnoredReason(kAXInertElement));
|
| } else {
|
| - // TODO(aboxhall): handle inert attribute if it eventuates
|
| - ignored_reasons->push_back(IgnoredReason(kAXInert));
|
| + const AXObject* inert_root_el = InertRoot();
|
| + if (inert_root_el == this) {
|
| + ignored_reasons->push_back(IgnoredReason(kAXInertElement));
|
| + } else {
|
| + ignored_reasons->push_back(
|
| + IgnoredReason(kAXInertSubtree, inert_root_el));
|
| + }
|
| }
|
| }
|
| return true;
|
| @@ -635,11 +653,12 @@ bool AXObject::ComputeIsInertOrAriaHidden(
|
| const AXObject* hidden_root = AriaHiddenRoot();
|
| if (hidden_root) {
|
| if (ignored_reasons) {
|
| - if (hidden_root == this)
|
| - ignored_reasons->push_back(IgnoredReason(kAXAriaHidden));
|
| - else
|
| + if (hidden_root == this) {
|
| + ignored_reasons->push_back(IgnoredReason(kAXAriaHiddenElement));
|
| + } else {
|
| ignored_reasons->push_back(
|
| - IgnoredReason(kAXAriaHiddenRoot, hidden_root));
|
| + IgnoredReason(kAXAriaHiddenSubtree, hidden_root));
|
| + }
|
| }
|
| return true;
|
| }
|
| @@ -672,6 +691,26 @@ const AXObject* AXObject::AriaHiddenRoot() const {
|
| return 0;
|
| }
|
|
|
| +const AXObject* AXObject::InertRoot() const {
|
| + const AXObject* object = this;
|
| + if (!RuntimeEnabledFeatures::inertAttributeEnabled())
|
| + return 0;
|
| +
|
| + while (object && !object->IsAXNodeObject())
|
| + object = object->ParentObject();
|
| + Node* node = object->GetNode();
|
| + Element* element = node->IsElementNode()
|
| + ? ToElement(node)
|
| + : FlatTreeTraversal::ParentElement(*node);
|
| + while (element) {
|
| + if (element->hasAttribute(inertAttr))
|
| + return AxObjectCache().GetOrCreate(element);
|
| + element = FlatTreeTraversal::ParentElement(*element);
|
| + }
|
| +
|
| + return 0;
|
| +}
|
| +
|
| bool AXObject::IsDescendantOfDisabledNode() const {
|
| UpdateCachedAttributeValuesIfNeeded();
|
| return cached_is_descendant_of_disabled_node_;
|
| @@ -1225,11 +1264,19 @@ Document* AXObject::GetDocument() const {
|
|
|
| FrameView* AXObject::DocumentFrameView() const {
|
| const AXObject* object = this;
|
| - while (object && !object->IsAXLayoutObject())
|
| + LOG(INFO) << "DocumentFrameView for " << RoleName(RoleValue()).Utf8().data();
|
| + base::debug::StackTrace trace;
|
| + trace.Print();
|
| +
|
| + while (object && !object->IsAXLayoutObject()) {
|
| object = object->ParentObject();
|
| + LOG(INFO) << "parent: " << (object ? RoleName(object->RoleValue()).Utf8().data() : "null");
|
| + }
|
|
|
| - if (!object)
|
| + if (!object) {
|
| + LOG(INFO) << "No candidate layout object in parent hierarchy";
|
| return 0;
|
| + }
|
|
|
| return object->DocumentFrameView();
|
| }
|
| @@ -1868,4 +1915,5 @@ DEFINE_TRACE(AXObject) {
|
| visitor->Trace(ax_object_cache_);
|
| }
|
|
|
| +
|
| } // namespace blink
|
|
|