Index: Source/modules/accessibility/AXObjectCacheImpl.cpp |
diff --git a/Source/modules/accessibility/AXObjectCacheImpl.cpp b/Source/modules/accessibility/AXObjectCacheImpl.cpp |
index d2a0609cbe4395aa500b8858868b33eae8ee4c38..0932d8a46c14e8ca79de6ce0419600d4c76c8bfe 100644 |
--- a/Source/modules/accessibility/AXObjectCacheImpl.cpp |
+++ b/Source/modules/accessibility/AXObjectCacheImpl.cpp |
@@ -647,7 +647,7 @@ void AXObjectCacheImpl::textChanged(AXObject* obj) |
bool parentAlreadyExists = obj->parentObjectIfExists(); |
obj->textChanged(); |
- postNotification(obj, AXObjectCacheImpl::AXTextChanged, true); |
+ postNotification(obj, AXObjectCacheImpl::AXTextChanged); |
if (parentAlreadyExists) |
obj->notifyIfIgnoredValueChanged(); |
} |
@@ -713,31 +713,27 @@ void AXObjectCacheImpl::notificationPostTimerFired(Timer<AXObjectCacheImpl>*) |
m_notificationsToPost.clear(); |
} |
-void AXObjectCacheImpl::postNotification(LayoutObject* layoutObject, AXNotification notification, bool postToElement) |
+void AXObjectCacheImpl::postNotification(LayoutObject* layoutObject, AXNotification notification) |
{ |
if (!layoutObject) |
return; |
m_modificationCount++; |
- postNotification(get(layoutObject), notification, postToElement); |
+ postNotification(get(layoutObject), notification); |
} |
-void AXObjectCacheImpl::postNotification(Node* node, AXNotification notification, bool postToElement) |
+void AXObjectCacheImpl::postNotification(Node* node, AXNotification notification) |
{ |
if (!node) |
return; |
m_modificationCount++; |
- postNotification(get(node), notification, postToElement); |
+ postNotification(get(node), notification); |
} |
-void AXObjectCacheImpl::postNotification(AXObject* object, AXNotification notification, bool postToElement) |
+void AXObjectCacheImpl::postNotification(AXObject* object, AXNotification notification) |
{ |
m_modificationCount++; |
- |
- if (object && !postToElement) |
- object = object->observableObject(); |
- |
if (!object) |
return; |
@@ -748,21 +744,24 @@ void AXObjectCacheImpl::postNotification(AXObject* object, AXNotification notifi |
void AXObjectCacheImpl::checkedStateChanged(Node* node) |
{ |
- postNotification(node, AXObjectCacheImpl::AXCheckedStateChanged, true); |
+ postNotification(node, AXObjectCacheImpl::AXCheckedStateChanged); |
} |
void AXObjectCacheImpl::selectedChildrenChanged(Node* node) |
{ |
- // postToElement is false so that you can pass in any child of an element and it will go up the parent tree |
- // to find the container which should send out the notification. |
- postNotification(node, AXSelectedChildrenChanged, false); |
+ selectedChildrenChanged(get(node)); |
} |
void AXObjectCacheImpl::selectedChildrenChanged(LayoutObject* layoutObject) |
{ |
- // postToElement is false so that you can pass in any child of an element and it will go up the parent tree |
- // to find the container which should send out the notification. |
- postNotification(layoutObject, AXSelectedChildrenChanged, false); |
+ selectedChildrenChanged(get(layoutObject)); |
+} |
+ |
+void AXObjectCacheImpl::selectedChildrenChanged(AXObject* obj) |
+{ |
+ while (obj && obj->roleValue() != ListBoxRole) |
+ obj = obj->parentObject(); |
+ postNotification(obj, AXSelectedChildrenChanged); |
} |
void AXObjectCacheImpl::handleScrollbarUpdate(FrameView* view) |
@@ -788,7 +787,7 @@ void AXObjectCacheImpl::handleLayoutComplete(LayoutObject* layoutObject) |
// allows an AX notification to be sent when a page has its first layout, rather than when the |
// document first loads. |
if (AXObject* obj = getOrCreate(layoutObject)) |
- postNotification(obj, AXLayoutComplete, true); |
+ postNotification(obj, AXLayoutComplete); |
} |
void AXObjectCacheImpl::handleAriaExpandedChange(Node* node) |
@@ -827,7 +826,7 @@ void AXObjectCacheImpl::handleAttributeChanged(const QualifiedName& attrName, El |
if (attrName == aria_activedescendantAttr) |
handleActiveDescendantChanged(element); |
else if (attrName == aria_valuenowAttr || attrName == aria_valuetextAttr) |
- postNotification(element, AXObjectCacheImpl::AXValueChanged, true); |
+ postNotification(element, AXObjectCacheImpl::AXValueChanged); |
else if (attrName == aria_labelAttr || attrName == aria_labeledbyAttr || attrName == aria_labelledbyAttr) |
textChanged(element); |
else if (attrName == aria_checkedAttr) |
@@ -839,9 +838,9 @@ void AXObjectCacheImpl::handleAttributeChanged(const QualifiedName& attrName, El |
else if (attrName == aria_hiddenAttr) |
childrenChanged(element->parentNode()); |
else if (attrName == aria_invalidAttr) |
- postNotification(element, AXObjectCacheImpl::AXInvalidStatusChanged, true); |
+ postNotification(element, AXObjectCacheImpl::AXInvalidStatusChanged); |
else |
- postNotification(element, AXObjectCacheImpl::AXAriaAttributeChanged, true); |
+ postNotification(element, AXObjectCacheImpl::AXAriaAttributeChanged); |
} |
void AXObjectCacheImpl::labelChanged(Element* element) |
@@ -865,7 +864,7 @@ void AXObjectCacheImpl::inlineTextBoxesUpdated(LayoutObject* layoutObject) |
if (AXObject* obj = get(layoutObject)) { |
if (!obj->needsToUpdateChildren()) { |
obj->setNeedsToUpdateChildren(); |
- postNotification(layoutObject, AXChildrenChanged, true); |
+ postNotification(layoutObject, AXChildrenChanged); |
} |
} |
} |
@@ -992,22 +991,25 @@ void AXObjectCacheImpl::handleFocusedUIElementChanged(Node*, Node* newFocusedNod |
void AXObjectCacheImpl::handleInitialFocus() |
{ |
- postNotification(&m_document, AXObjectCache::AXFocusedUIElementChanged, true); |
+ postNotification(&m_document, AXObjectCache::AXFocusedUIElementChanged); |
} |
void AXObjectCacheImpl::handleEditableTextContentChanged(Node* node) |
{ |
- postNotification(node, AXObjectCache::AXValueChanged, false); |
+ AXObject* obj = get(node); |
+ while (obj && !obj->isNativeTextControl() && !obj->isNonNativeTextControl()) |
+ obj = obj->parentObject(); |
+ postNotification(obj, AXObjectCache::AXValueChanged); |
} |
void AXObjectCacheImpl::handleTextFormControlChanged(Node* node) |
{ |
- postNotification(node, AXObjectCache::AXValueChanged, false); |
+ handleEditableTextContentChanged(node); |
} |
void AXObjectCacheImpl::handleValueChanged(Node* node) |
{ |
- postNotification(node, AXObjectCache::AXValueChanged, true); |
+ postNotification(node, AXObjectCache::AXValueChanged); |
} |
void AXObjectCacheImpl::handleUpdateActiveMenuOption(LayoutMenuList* menuList, int optionIndex) |
@@ -1018,12 +1020,12 @@ void AXObjectCacheImpl::handleUpdateActiveMenuOption(LayoutMenuList* menuList, i |
void AXObjectCacheImpl::handleLoadComplete(Document* document) |
{ |
- postNotification(getOrCreate(document), AXObjectCache::AXLoadComplete, true); |
+ postNotification(getOrCreate(document), AXObjectCache::AXLoadComplete); |
} |
void AXObjectCacheImpl::handleLayoutComplete(Document* document) |
{ |
- postNotification(getOrCreate(document), AXObjectCache::AXLayoutComplete, true); |
+ postNotification(getOrCreate(document), AXObjectCache::AXLayoutComplete); |
} |
void AXObjectCacheImpl::handleScrolledToAnchor(const Node* anchorNode) |