Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(57)

Unified Diff: content/browser/accessibility/browser_accessibility_win.cc

Issue 2054393002: Implemented IAccessible2 reverse relations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/accessibility/browser_accessibility_win.cc
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc
index 88c5c8254a951210390b272d1ba3c65483f47732..4e2d2e8ab315a0bc46f3df8d6b3965b06efbb110 100644
--- a/content/browser/accessibility/browser_accessibility_win.cc
+++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -3526,11 +3526,20 @@ void BrowserAccessibilityWin::UpdateStep1ComputeWinAttributes() {
relations_[i]->Release();
relations_.clear();
- // Handle title UI element.
- AddRelations(ui::AX_ATTR_CONTROLS_IDS, IA2_RELATION_CONTROLLER_FOR);
- AddRelations(ui::AX_ATTR_DESCRIBEDBY_IDS, IA2_RELATION_DESCRIBED_BY);
- AddRelations(ui::AX_ATTR_FLOWTO_IDS, IA2_RELATION_FLOWS_TO);
- AddRelations(ui::AX_ATTR_LABELLEDBY_IDS, IA2_RELATION_LABELLED_BY);
+ AddBidirectionalRelations(IA2_RELATION_CONTROLLER_FOR,
+ IA2_RELATION_CONTROLLED_BY,
+ ui::AX_ATTR_CONTROLS_IDS);
+ AddBidirectionalRelations(IA2_RELATION_DESCRIBED_BY,
+ IA2_RELATION_DESCRIPTION_FOR,
+ ui::AX_ATTR_DESCRIBEDBY_IDS);
+ AddBidirectionalRelations(IA2_RELATION_FLOWS_TO, IA2_RELATION_FLOWS_FROM,
+ ui::AX_ATTR_FLOWTO_IDS);
+ AddBidirectionalRelations(IA2_RELATION_LABELLED_BY, IA2_RELATION_LABEL_FOR,
+ ui::AX_ATTR_LABELLEDBY_IDS);
+
+ int member_of_id;
+ if (GetIntAttribute(ui::AX_ATTR_MEMBER_OF_ID, &member_of_id))
+ AddRelation(IA2_RELATION_MEMBER_OF, member_of_id);
UpdateRequiredAttributes();
// If this is a web area for a presentational iframe, give it a role of
@@ -4436,22 +4445,39 @@ bool BrowserAccessibilityWin::IsListBoxOptionOrMenuListOption() {
return false;
}
-void BrowserAccessibilityWin::AddRelations(
- ui::AXIntListAttribute src_attr,
- const base::string16& iaccessiblerelation_type) {
- if (!HasIntListAttribute(src_attr))
+void BrowserAccessibilityWin::AddRelation(const base::string16& relation_type,
+ int target_id) {
+ CComObject<BrowserAccessibilityRelation>* relation;
+ HRESULT hr =
+ CComObject<BrowserAccessibilityRelation>::CreateInstance(&relation);
+ DCHECK(SUCCEEDED(hr));
+ relation->AddRef();
+ relation->Initialize(this, relation_type);
+ relation->AddTarget(target_id);
+ relations_.push_back(relation);
+}
+
+void BrowserAccessibilityWin::AddBidirectionalRelations(
+ const base::string16& relation_type,
+ const base::string16& reverse_relation_type,
+ ui::AXIntListAttribute attribute) {
+ if (!HasIntListAttribute(attribute))
return;
- const std::vector<int32_t>& ids = GetIntListAttribute(src_attr);
- for (size_t i = 0; i < ids.size(); ++i) {
+ for (int target_id : GetIntListAttribute(attribute)) {
+ BrowserAccessibilityWin* target =
+ GetFromID(static_cast<int32_t>(target_id));
+ if (!target || !target->instance_active())
+ continue;
CComObject<BrowserAccessibilityRelation>* relation;
HRESULT hr =
CComObject<BrowserAccessibilityRelation>::CreateInstance(&relation);
DCHECK(SUCCEEDED(hr));
relation->AddRef();
- relation->Initialize(this, iaccessiblerelation_type);
- relation->AddTarget(ids[i]);
+ relation->Initialize(this, relation_type);
+ relation->AddTarget(target_id);
relations_.push_back(relation);
+ target->AddRelation(reverse_relation_type, target_id);
dmazzoni 2016/06/13 05:41:18 I think this is going to keep adding this reverse
}
}

Powered by Google App Engine
This is Rietveld 408576698