Index: third_party/WebKit/Source/web/tests/AccessibilityObjectModelTest.cpp |
diff --git a/third_party/WebKit/Source/web/tests/AccessibilityObjectModelTest.cpp b/third_party/WebKit/Source/web/tests/AccessibilityObjectModelTest.cpp |
index 4e1a3600225dd2fd2290cc142f58ed808b8a05d5..cee1987b9679349e1a4a98122dec9da3d32a2675 100644 |
--- a/third_party/WebKit/Source/web/tests/AccessibilityObjectModelTest.cpp |
+++ b/third_party/WebKit/Source/web/tests/AccessibilityObjectModelTest.cpp |
@@ -58,6 +58,79 @@ TEST_F(AccessibilityObjectModelTest, SetAccessibleNodeRole) { |
EXPECT_EQ(kSliderRole, axButton->RoleValue()); |
} |
+TEST_F(AccessibilityObjectModelTest, AOMDoesNotReflectARIA) { |
+ SimRequest main_resource("https://example.com/", "text/html"); |
+ LoadURL("https://example.com/"); |
+ main_resource.Complete("<input id=textbox>"); |
+ |
+ // Set ARIA attributes. |
+ auto* textbox = GetDocument().getElementById("textbox"); |
+ ASSERT_NE(nullptr, textbox); |
+ textbox->setAttribute("role", "combobox"); |
+ textbox->setAttribute("aria-label", "Combo"); |
+ textbox->setAttribute("aria-disabled", "true"); |
+ |
+ // Assert that the ARIA attributes affect the AX object. |
+ auto* cache = AXObjectCache(); |
+ ASSERT_NE(nullptr, cache); |
+ auto* axTextBox = cache->GetOrCreate(textbox); |
+ EXPECT_EQ(kComboBoxRole, axTextBox->RoleValue()); |
+ AXNameFrom name_from; |
+ AXObjectImpl::AXObjectVector name_objects; |
+ EXPECT_EQ("Combo", axTextBox->GetName(name_from, &name_objects)); |
+ EXPECT_FALSE(axTextBox->IsEnabled()); |
+ |
+ // The AOM properties should still all be null. |
+ EXPECT_EQ(nullptr, textbox->accessibleNode()->role()); |
+ EXPECT_EQ(nullptr, textbox->accessibleNode()->label()); |
+ bool is_null = false; |
+ EXPECT_FALSE(textbox->accessibleNode()->disabled(is_null)); |
+ EXPECT_TRUE(is_null); |
+} |
+ |
+TEST_F(AccessibilityObjectModelTest, AOMPropertiesCanBeCleared) { |
+ SimRequest main_resource("https://example.com/", "text/html"); |
+ LoadURL("https://example.com/"); |
+ main_resource.Complete("<input type=button id=button>"); |
+ |
+ // Set ARIA attributes. |
+ auto* button = GetDocument().getElementById("button"); |
+ ASSERT_NE(nullptr, button); |
+ button->setAttribute("role", "checkbox"); |
+ button->setAttribute("aria-label", "Check"); |
+ button->setAttribute("aria-disabled", "true"); |
+ |
+ // Assert that the AX object was affected by ARIA attributes. |
+ auto* cache = AXObjectCache(); |
+ ASSERT_NE(nullptr, cache); |
+ auto* axButton = cache->GetOrCreate(button); |
+ EXPECT_EQ(kCheckBoxRole, axButton->RoleValue()); |
+ AXNameFrom name_from; |
+ AXObjectImpl::AXObjectVector name_objects; |
+ EXPECT_EQ("Check", axButton->GetName(name_from, &name_objects)); |
+ EXPECT_FALSE(axButton->IsEnabled()); |
+ |
+ // Now set the AOM properties to override. |
+ button->accessibleNode()->setRole("radio"); |
+ button->accessibleNode()->setLabel("Radio"); |
+ button->accessibleNode()->setDisabled(false, false); |
+ |
+ // Assert that the AX object was affected by AOM properties. |
+ EXPECT_EQ(kRadioButtonRole, axButton->RoleValue()); |
+ EXPECT_EQ("Radio", axButton->GetName(name_from, &name_objects)); |
+ EXPECT_TRUE(axButton->IsEnabled()); |
+ |
+ // Null the AOM properties. |
+ button->accessibleNode()->setRole(g_null_atom); |
+ button->accessibleNode()->setLabel(g_null_atom); |
+ button->accessibleNode()->setDisabled(false, true); |
+ |
+ // The AX Object should now revert to ARIA. |
+ EXPECT_EQ(kCheckBoxRole, axButton->RoleValue()); |
+ EXPECT_EQ("Check", axButton->GetName(name_from, &name_objects)); |
+ EXPECT_FALSE(axButton->IsEnabled()); |
+} |
+ |
} // namespace |
} // namespace blink |