Index: Source/modules/accessibility/AXObject.cpp |
diff --git a/Source/modules/accessibility/AXObject.cpp b/Source/modules/accessibility/AXObject.cpp |
index d451350c269b3c73125e32f061c7b31bacc2fce0..9a6158096672cd72bed7b0b44dcdeb10790cdfc1 100644 |
--- a/Source/modules/accessibility/AXObject.cpp |
+++ b/Source/modules/accessibility/AXObject.cpp |
@@ -317,8 +317,22 @@ bool AXObject::isPasswordFieldAndShouldHideValue() const |
return isPasswordField(); |
} |
+// If you call node->hasEditableStyle() since that will return true if an ancestor is editable. |
+// This only returns true if this is the element that actually has the contentEditable attribute set. |
+bool AXObject::hasContentEditableAttributeSet() const |
+{ |
+ if (!hasAttribute(contenteditableAttr)) |
+ return false; |
+ const AtomicString& contentEditableValue = getAttribute(contenteditableAttr); |
+ // Both "true" (case-insensitive) and the empty string count as true. |
+ return contentEditableValue.isEmpty() || equalIgnoringCase(contentEditableValue, "true"); |
+} |
+ |
bool AXObject::isTextControl() const |
{ |
+ if (hasContentEditableAttributeSet()) |
+ return true; |
+ |
switch (roleValue()) { |
case TextAreaRole: |
case TextFieldRole: |