Commit b9a3df46 authored by Aaron Leventhal's avatar Aaron Leventhal Committed by Chromium LUCI CQ

Clean up role overriding code, add DCHECK

If the role logic needs to be overridden, do it via
DetermineAccessibilityRole() or Init(). Do not allow RoleValue() to be
overridden, as the role must no vary during the lifetime of an object.

Bug: None
Change-Id: I14bda422895924f495be13e67de1a598ccbebeb7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2598621
Commit-Queue: Aaron Leventhal <aleventhal@chromium.org>
Reviewed-by: default avatarAaron Leventhal <aleventhal@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#838756}
parent 5c5c20bc
...@@ -61,19 +61,17 @@ AXObject* AXImageMapLink::ComputeParent() const { ...@@ -61,19 +61,17 @@ AXObject* AXImageMapLink::ComputeParent() const {
return AXObjectCache().GetOrCreate(MapElement()->GetLayoutObject()); return AXObjectCache().GetOrCreate(MapElement()->GetLayoutObject());
} }
ax::mojom::Role AXImageMapLink::RoleValue() const { ax::mojom::blink::Role AXImageMapLink::DetermineAccessibilityRole() {
const AtomicString& aria_role =
GetAOMPropertyOrARIAAttribute(AOMStringProperty::kRole);
if (!aria_role.IsEmpty())
return AXObject::AriaRoleToWebCoreRole(aria_role);
// https://www.w3.org/TR/html-aam-1.0/#html-element-role-mappings // https://www.w3.org/TR/html-aam-1.0/#html-element-role-mappings
// <area> tags without an href should be treated as static text. // <area> tags without an href should be treated as static text.
KURL url = Url(); KURL url = Url();
if (url.IsNull() || url.IsEmpty()) native_role_ = url.IsNull() || url.IsEmpty()
return ax::mojom::Role::kStaticText; ? ax::mojom::blink::Role::kStaticText
: ax::mojom::blink::Role::kLink;
return ax::mojom::Role::kLink; aria_role_ = DetermineAriaRoleAttribute();
return aria_role_ == ax::mojom::blink::Role::kUnknown ? native_role_
: aria_role_;
} }
bool AXImageMapLink::ComputeAccessibilityIsIgnored( bool AXImageMapLink::ComputeAccessibilityIsIgnored(
......
...@@ -50,7 +50,7 @@ class AXImageMapLink final : public AXNodeObject { ...@@ -50,7 +50,7 @@ class AXImageMapLink final : public AXNodeObject {
HTMLMapElement* MapElement() const; HTMLMapElement* MapElement() const;
ax::mojom::Role RoleValue() const override; ax::mojom::blink::Role DetermineAccessibilityRole() override;
bool ComputeAccessibilityIsIgnored(IgnoredReasons* = nullptr) const override; bool ComputeAccessibilityIsIgnored(IgnoredReasons* = nullptr) const override;
Element* AnchorElement() const override; Element* AnchorElement() const override;
......
...@@ -51,10 +51,6 @@ AXInlineTextBox::AXInlineTextBox( ...@@ -51,10 +51,6 @@ AXInlineTextBox::AXInlineTextBox(
AXObjectCacheImpl& ax_object_cache) AXObjectCacheImpl& ax_object_cache)
: AXObject(ax_object_cache), inline_text_box_(std::move(inline_text_box)) {} : AXObject(ax_object_cache), inline_text_box_(std::move(inline_text_box)) {}
ax::mojom::blink::Role AXInlineTextBox::RoleValue() const {
return ax::mojom::blink::Role::kInlineTextBox;
}
void AXInlineTextBox::GetRelativeBounds(AXObject** out_container, void AXInlineTextBox::GetRelativeBounds(AXObject** out_container,
FloatRect& out_bounds_in_container, FloatRect& out_bounds_in_container,
SkMatrix44& out_container_transform, SkMatrix44& out_container_transform,
...@@ -325,7 +321,9 @@ void AXInlineTextBox::GetDocumentMarkers( ...@@ -325,7 +321,9 @@ void AXInlineTextBox::GetDocumentMarkers(
} }
} }
void AXInlineTextBox::Init() {} void AXInlineTextBox::Init() {
role_ = ax::mojom::blink::Role::kInlineTextBox;
}
void AXInlineTextBox::Detach() { void AXInlineTextBox::Detach() {
inline_text_box_ = nullptr; inline_text_box_ = nullptr;
......
...@@ -46,7 +46,6 @@ class AXInlineTextBox final : public AXObject { ...@@ -46,7 +46,6 @@ class AXInlineTextBox final : public AXObject {
AXInlineTextBox(scoped_refptr<AbstractInlineTextBox>, AXObjectCacheImpl&); AXInlineTextBox(scoped_refptr<AbstractInlineTextBox>, AXObjectCacheImpl&);
// AXObject overrides. // AXObject overrides.
ax::mojom::blink::Role RoleValue() const override;
String GetName(ax::mojom::blink::NameFrom&, String GetName(ax::mojom::blink::NameFrom&,
AXObject::AXObjectVector* name_objects) const override; AXObject::AXObjectVector* name_objects) const override;
void TextCharacterOffsets(Vector<int>&) const override; void TextCharacterOffsets(Vector<int>&) const override;
......
...@@ -53,18 +53,6 @@ LocalFrameView* AXMenuListOption::DocumentFrameView() const { ...@@ -53,18 +53,6 @@ LocalFrameView* AXMenuListOption::DocumentFrameView() const {
return element_->GetDocument().View(); return element_->GetDocument().View();
} }
ax::mojom::Role AXMenuListOption::RoleValue() const {
const AtomicString& aria_role =
GetAOMPropertyOrARIAAttribute(AOMStringProperty::kRole);
if (aria_role.IsEmpty())
return ax::mojom::Role::kMenuListOption;
ax::mojom::Role role = AriaRoleToWebCoreRole(aria_role);
if (role != ax::mojom::Role::kUnknown)
return role;
return ax::mojom::Role::kMenuListOption;
}
Element* AXMenuListOption::ActionElement() const { Element* AXMenuListOption::ActionElement() const {
return element_; return element_;
} }
......
...@@ -48,7 +48,6 @@ class AXMenuListOption final : public AXNodeObject { ...@@ -48,7 +48,6 @@ class AXMenuListOption final : public AXNodeObject {
void Detach() override; void Detach() override;
bool IsDetached() const override { return !element_; } bool IsDetached() const override { return !element_; }
LocalFrameView* DocumentFrameView() const override; LocalFrameView* DocumentFrameView() const override;
ax::mojom::Role RoleValue() const override;
bool CanHaveChildren() const override { return false; } bool CanHaveChildren() const override { return false; }
AXObject* ComputeParent() const override; AXObject* ComputeParent() const override;
......
...@@ -51,8 +51,8 @@ class AXMenuListPopup final : public AXMockObject { ...@@ -51,8 +51,8 @@ class AXMenuListPopup final : public AXMockObject {
private: private:
bool IsMenuListPopup() const override { return true; } bool IsMenuListPopup() const override { return true; }
ax::mojom::Role RoleValue() const override { ax::mojom::blink::Role DetermineAccessibilityRole() override {
return ax::mojom::Role::kMenuListPopup; return ax::mojom::blink::Role::kMenuListPopup;
} }
bool IsVisible() const override; bool IsVisible() const override;
......
...@@ -592,6 +592,8 @@ AXObject::~AXObject() { ...@@ -592,6 +592,8 @@ AXObject::~AXObject() {
void AXObject::Init() { void AXObject::Init() {
role_ = DetermineAccessibilityRole(); role_ = DetermineAccessibilityRole();
DCHECK(role_ != ax::mojom::blink::Role::kUnknown)
<< "Illegal Role::kUnknown for " << GetNode();
} }
void AXObject::Detach() { void AXObject::Detach() {
...@@ -4566,8 +4568,7 @@ bool AXObject::SupportsNameFromContents(bool recursive) const { ...@@ -4566,8 +4568,7 @@ bool AXObject::SupportsNameFromContents(bool recursive) const {
} }
case ax::mojom::blink::Role::kUnknown: case ax::mojom::blink::Role::kUnknown:
LOG(ERROR) << "ax::mojom::blink::Role::kUnknown for " << GetNode(); NOTREACHED() << "Illegal Role::kUnknown for " << GetNode();
NOTREACHED();
break; break;
} }
......
...@@ -413,7 +413,7 @@ class MODULES_EXPORT AXObject : public GarbageCollected<AXObject> { ...@@ -413,7 +413,7 @@ class MODULES_EXPORT AXObject : public GarbageCollected<AXObject> {
virtual bool IsVirtualObject() const; virtual bool IsVirtualObject() const;
// Check object role or purpose. // Check object role or purpose.
virtual ax::mojom::blink::Role RoleValue() const; ax::mojom::blink::Role RoleValue() const;
bool IsARIATextControl() const; bool IsARIATextControl() const;
bool IsAnchor() const; bool IsAnchor() const;
bool IsButton() const; bool IsButton() const;
......
...@@ -76,8 +76,8 @@ const AtomicString& AXValidationMessage::LiveRegionRelevant() const { ...@@ -76,8 +76,8 @@ const AtomicString& AXValidationMessage::LiveRegionRelevant() const {
return live_region_relevant_additions; return live_region_relevant_additions;
} }
ax::mojom::Role AXValidationMessage::RoleValue() const { ax::mojom::blink::Role AXValidationMessage::DetermineAccessibilityRole() {
return ax::mojom::Role::kAlert; return ax::mojom::blink::Role::kAlert;
} }
ListedElement* AXValidationMessage::RelatedFormControlIfVisible() const { ListedElement* AXValidationMessage::RelatedFormControlIfVisible() const {
......
...@@ -42,7 +42,7 @@ class AXValidationMessage final : public AXMockObject { ...@@ -42,7 +42,7 @@ class AXValidationMessage final : public AXMockObject {
ax::mojom::NameFrom&, ax::mojom::NameFrom&,
AXRelatedObjectVector*, AXRelatedObjectVector*,
NameSources*) const override; NameSources*) const override;
ax::mojom::Role RoleValue() const override; ax::mojom::blink::Role DetermineAccessibilityRole() override;
ListedElement* RelatedFormControlIfVisible() const; ListedElement* RelatedFormControlIfVisible() const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment