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

Side by Side Diff: content/browser/accessibility/accessibility_tree_formatter_blink.cc

Issue 2587343004: Finish implementation and tests of 5 ARIA 1.1 attributes. (Closed)
Patch Set: Rebase on previous change Created 4 years 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 unified diff | Download patch
« no previous file with comments | « no previous file | content/browser/accessibility/browser_accessibility_cocoa.mm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "content/browser/accessibility/accessibility_tree_formatter_blink.h" 9 #include "content/browser/accessibility/accessibility_tree_formatter_blink.h"
10 #include "content/browser/accessibility/browser_accessibility_manager.h"
10 #include "ui/gfx/geometry/rect_conversions.h" 11 #include "ui/gfx/geometry/rect_conversions.h"
11 #include "ui/gfx/transform.h" 12 #include "ui/gfx/transform.h"
12 13
13 namespace content { 14 namespace content {
14 15
15 AccessibilityTreeFormatterBlink::AccessibilityTreeFormatterBlink() 16 AccessibilityTreeFormatterBlink::AccessibilityTreeFormatterBlink()
16 : AccessibilityTreeFormatter() { 17 : AccessibilityTreeFormatter() {
17 } 18 }
18 19
19 AccessibilityTreeFormatterBlink::~AccessibilityTreeFormatterBlink() { 20 AccessibilityTreeFormatterBlink::~AccessibilityTreeFormatterBlink() {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 ++attr_index) { 73 ++attr_index) {
73 auto attr = static_cast<ui::AXStringAttribute>(attr_index); 74 auto attr = static_cast<ui::AXStringAttribute>(attr_index);
74 if (node.HasStringAttribute(attr)) 75 if (node.HasStringAttribute(attr))
75 dict->SetString(ui::ToString(attr), node.GetStringAttribute(attr)); 76 dict->SetString(ui::ToString(attr), node.GetStringAttribute(attr));
76 } 77 }
77 78
78 for (int attr_index = ui::AX_INT_ATTRIBUTE_NONE; 79 for (int attr_index = ui::AX_INT_ATTRIBUTE_NONE;
79 attr_index <= ui::AX_INT_ATTRIBUTE_LAST; 80 attr_index <= ui::AX_INT_ATTRIBUTE_LAST;
80 ++attr_index) { 81 ++attr_index) {
81 auto attr = static_cast<ui::AXIntAttribute>(attr_index); 82 auto attr = static_cast<ui::AXIntAttribute>(attr_index);
82 if (node.HasIntAttribute(attr)) 83 if (node.HasIntAttribute(attr)) {
83 dict->SetInteger(ui::ToString(attr), node.GetIntAttribute(attr)); 84 int value = node.GetIntAttribute(attr);
85 if (ui::IsNodeIdIntAttribute(attr)) {
86 BrowserAccessibility* target = node.manager()->GetFromID(value);
87 if (target) {
88 dict->SetString(ui::ToString(attr),
89 ui::ToString(target->GetData().role));
90 } else {
91 dict->SetString(ui::ToString(attr), "null");
92 }
93 } else {
94 dict->SetInteger(ui::ToString(attr), value);
95 }
96 }
84 } 97 }
85 98
86 for (int attr_index = ui::AX_FLOAT_ATTRIBUTE_NONE; 99 for (int attr_index = ui::AX_FLOAT_ATTRIBUTE_NONE;
87 attr_index <= ui::AX_FLOAT_ATTRIBUTE_LAST; 100 attr_index <= ui::AX_FLOAT_ATTRIBUTE_LAST;
88 ++attr_index) { 101 ++attr_index) {
89 auto attr = static_cast<ui::AXFloatAttribute>(attr_index); 102 auto attr = static_cast<ui::AXFloatAttribute>(attr_index);
90 if (node.HasFloatAttribute(attr)) 103 if (node.HasFloatAttribute(attr))
91 dict->SetDouble(ui::ToString(attr), node.GetFloatAttribute(attr)); 104 dict->SetDouble(ui::ToString(attr), node.GetFloatAttribute(attr));
92 } 105 }
93 106
94 for (int attr_index = ui::AX_BOOL_ATTRIBUTE_NONE; 107 for (int attr_index = ui::AX_BOOL_ATTRIBUTE_NONE;
95 attr_index <= ui::AX_BOOL_ATTRIBUTE_LAST; 108 attr_index <= ui::AX_BOOL_ATTRIBUTE_LAST;
96 ++attr_index) { 109 ++attr_index) {
97 auto attr = static_cast<ui::AXBoolAttribute>(attr_index); 110 auto attr = static_cast<ui::AXBoolAttribute>(attr_index);
98 if (node.HasBoolAttribute(attr)) 111 if (node.HasBoolAttribute(attr))
99 dict->SetBoolean(ui::ToString(attr), node.GetBoolAttribute(attr)); 112 dict->SetBoolean(ui::ToString(attr), node.GetBoolAttribute(attr));
100 } 113 }
101 114
102 for (int attr_index = ui::AX_INT_LIST_ATTRIBUTE_NONE; 115 for (int attr_index = ui::AX_INT_LIST_ATTRIBUTE_NONE;
103 attr_index <= ui::AX_INT_LIST_ATTRIBUTE_LAST; 116 attr_index <= ui::AX_INT_LIST_ATTRIBUTE_LAST;
104 ++attr_index) { 117 ++attr_index) {
105 auto attr = static_cast<ui::AXIntListAttribute>(attr_index); 118 auto attr = static_cast<ui::AXIntListAttribute>(attr_index);
106 if (node.HasIntListAttribute(attr)) { 119 if (node.HasIntListAttribute(attr)) {
107 std::vector<int32_t> values; 120 std::vector<int32_t> values;
108 node.GetIntListAttribute(attr, &values); 121 node.GetIntListAttribute(attr, &values);
109 base::ListValue* value_list = new base::ListValue; 122 base::ListValue* value_list = new base::ListValue;
110 for (size_t i = 0; i < values.size(); ++i) 123 for (size_t i = 0; i < values.size(); ++i) {
111 value_list->AppendInteger(values[i]); 124 if (ui::IsNodeIdIntListAttribute(attr)) {
125 BrowserAccessibility* target = node.manager()->GetFromID(values[i]);
126 if (target)
127 value_list->AppendString(ui::ToString(target->GetData().role));
128 else
129 value_list->AppendString("null");
130 } else {
131 value_list->AppendInteger(values[i]);
132 }
133 }
112 dict->Set(ui::ToString(attr), value_list); 134 dict->Set(ui::ToString(attr), value_list);
113 } 135 }
114 } 136 }
115 } 137 }
116 138
117 base::string16 AccessibilityTreeFormatterBlink::ToString( 139 base::string16 AccessibilityTreeFormatterBlink::ToString(
118 const base::DictionaryValue& dict) { 140 const base::DictionaryValue& dict) {
119 base::string16 line; 141 base::string16 line;
120 142
121 if (show_ids()) { 143 if (show_ids()) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 "%s='%s'", 193 "%s='%s'",
172 ui::ToString(attr).c_str(), 194 ui::ToString(attr).c_str(),
173 string_value.c_str()), 195 string_value.c_str()),
174 &line); 196 &line);
175 } 197 }
176 198
177 for (int attr_index = ui::AX_INT_ATTRIBUTE_NONE; 199 for (int attr_index = ui::AX_INT_ATTRIBUTE_NONE;
178 attr_index <= ui::AX_INT_ATTRIBUTE_LAST; 200 attr_index <= ui::AX_INT_ATTRIBUTE_LAST;
179 ++attr_index) { 201 ++attr_index) {
180 auto attr = static_cast<ui::AXIntAttribute>(attr_index); 202 auto attr = static_cast<ui::AXIntAttribute>(attr_index);
181 int int_value; 203 if (ui::IsNodeIdIntAttribute(attr)) {
182 if (!dict.GetInteger(ui::ToString(attr), &int_value)) 204 std::string string_value;
183 continue; 205 if (dict.GetString(ui::ToString(attr), &string_value)) {
184 WriteAttribute(false, 206 WriteAttribute(false,
185 base::StringPrintf( 207 base::StringPrintf(
186 "%s=%d", 208 "%s=%s",
187 ui::ToString(attr).c_str(), 209 ui::ToString(attr).c_str(),
188 int_value), 210 string_value.c_str()),
189 &line); 211 &line);
212 }
213 } else {
214 int int_value;
215 if (!dict.GetInteger(ui::ToString(attr), &int_value))
216 continue;
217 WriteAttribute(false,
218 base::StringPrintf(
219 "%s=%d",
220 ui::ToString(attr).c_str(),
221 int_value),
222 &line);
223 }
190 } 224 }
191 225
192 for (int attr_index = ui::AX_BOOL_ATTRIBUTE_NONE; 226 for (int attr_index = ui::AX_BOOL_ATTRIBUTE_NONE;
193 attr_index <= ui::AX_BOOL_ATTRIBUTE_LAST; 227 attr_index <= ui::AX_BOOL_ATTRIBUTE_LAST;
194 ++attr_index) { 228 ++attr_index) {
195 auto attr = static_cast<ui::AXBoolAttribute>(attr_index); 229 auto attr = static_cast<ui::AXBoolAttribute>(attr_index);
196 bool bool_value; 230 bool bool_value;
197 if (!dict.GetBoolean(ui::ToString(attr), &bool_value)) 231 if (!dict.GetBoolean(ui::ToString(attr), &bool_value))
198 continue; 232 continue;
199 WriteAttribute(false, 233 WriteAttribute(false,
200 base::StringPrintf( 234 base::StringPrintf(
201 "%s=%s", 235 "%s=%s",
202 ui::ToString(attr).c_str(), 236 ui::ToString(attr).c_str(),
203 bool_value ? "true" : "false"), 237 bool_value ? "true" : "false"),
204 &line); 238 &line);
205 } 239 }
206 240
207 for (int attr_index = ui::AX_INT_LIST_ATTRIBUTE_NONE; 241 for (int attr_index = ui::AX_INT_LIST_ATTRIBUTE_NONE;
208 attr_index <= ui::AX_INT_LIST_ATTRIBUTE_LAST; 242 attr_index <= ui::AX_INT_LIST_ATTRIBUTE_LAST;
209 ++attr_index) { 243 ++attr_index) {
210 auto attr = static_cast<ui::AXIntListAttribute>(attr_index); 244 auto attr = static_cast<ui::AXIntListAttribute>(attr_index);
211 const base::ListValue* value; 245 const base::ListValue* value;
212 if (!dict.GetList(ui::ToString(attr), &value)) 246 if (!dict.GetList(ui::ToString(attr), &value))
213 continue; 247 continue;
214 std::string attr_string = ui::ToString(attr) + "="; 248 std::string attr_string = ui::ToString(attr) + "=";
215 for (size_t i = 0; i < value->GetSize(); ++i) { 249 for (size_t i = 0; i < value->GetSize(); ++i) {
216 int int_value;
217 value->GetInteger(i, &int_value);
218 if (i > 0) 250 if (i > 0)
219 attr_string += ","; 251 attr_string += ",";
220 attr_string += base::IntToString(int_value); 252 if (ui::IsNodeIdIntListAttribute(attr)) {
253 std::string string_value;
254 value->GetString(i, &string_value);
255 attr_string += string_value;
256 } else {
257 int int_value;
258 value->GetInteger(i, &int_value);
259 attr_string += base::IntToString(int_value);
260 }
221 } 261 }
222 WriteAttribute(false, attr_string, &line); 262 WriteAttribute(false, attr_string, &line);
223 } 263 }
224 264
225 return line; 265 return line;
226 } 266 }
227 267
228 const base::FilePath::StringType 268 const base::FilePath::StringType
229 AccessibilityTreeFormatterBlink::GetExpectedFileSuffix() { 269 AccessibilityTreeFormatterBlink::GetExpectedFileSuffix() {
230 return FILE_PATH_LITERAL("-expected-blink.txt"); 270 return FILE_PATH_LITERAL("-expected-blink.txt");
231 } 271 }
232 272
233 const std::string AccessibilityTreeFormatterBlink::GetAllowEmptyString() { 273 const std::string AccessibilityTreeFormatterBlink::GetAllowEmptyString() {
234 return "@BLINK-ALLOW-EMPTY:"; 274 return "@BLINK-ALLOW-EMPTY:";
235 } 275 }
236 276
237 const std::string AccessibilityTreeFormatterBlink::GetAllowString() { 277 const std::string AccessibilityTreeFormatterBlink::GetAllowString() {
238 return "@BLINK-ALLOW:"; 278 return "@BLINK-ALLOW:";
239 } 279 }
240 280
241 const std::string AccessibilityTreeFormatterBlink::GetDenyString() { 281 const std::string AccessibilityTreeFormatterBlink::GetDenyString() {
242 return "@BLINK-DENY:"; 282 return "@BLINK-DENY:";
243 } 283 }
244 284
245 } // namespace content 285 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/accessibility/browser_accessibility_cocoa.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698