Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 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 <atlbase.h> | 5 #include <atlbase.h> |
| 6 #include <atlcom.h> | 6 #include <atlcom.h> |
| 7 #include <limits.h> | 7 #include <limits.h> |
| 8 #include <oleacc.h> | 8 #include <oleacc.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 | 10 |
| (...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1182 } | 1182 } |
| 1183 | 1183 |
| 1184 *object = nullptr; | 1184 *object = nullptr; |
| 1185 return E_FAIL; | 1185 return E_FAIL; |
| 1186 } | 1186 } |
| 1187 | 1187 |
| 1188 // | 1188 // |
| 1189 // Private member functions. | 1189 // Private member functions. |
| 1190 // | 1190 // |
| 1191 int AXPlatformNodeWin::MSAARole() { | 1191 int AXPlatformNodeWin::MSAARole() { |
| 1192 // If this is a web area for a presentational iframe, give it a role of | |
| 1193 // something other than DOCUMENT so that the fact that it's a separate doc | |
| 1194 // is not exposed to AT. | |
| 1195 if (IsWebAreaForPresentationalIframe()) { | |
| 1196 return ROLE_SYSTEM_GROUPING; | |
| 1197 } | |
| 1198 | |
| 1192 switch (GetData().role) { | 1199 switch (GetData().role) { |
| 1193 case ui::AX_ROLE_ALERT: | 1200 case ui::AX_ROLE_ALERT: |
| 1194 return ROLE_SYSTEM_ALERT; | 1201 return ROLE_SYSTEM_ALERT; |
| 1195 | 1202 |
| 1196 case ui::AX_ROLE_ALERT_DIALOG: | 1203 case ui::AX_ROLE_ALERT_DIALOG: |
| 1197 return ROLE_SYSTEM_DIALOG; | 1204 return ROLE_SYSTEM_DIALOG; |
| 1198 | 1205 |
| 1199 case ui::AX_ROLE_ANCHOR: | 1206 case ui::AX_ROLE_ANCHOR: |
| 1200 return ROLE_SYSTEM_LINK; | 1207 return ROLE_SYSTEM_LINK; |
| 1201 | 1208 |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1360 | 1367 |
| 1361 case ui::AX_ROLE_MENU_ITEM_RADIO: | 1368 case ui::AX_ROLE_MENU_ITEM_RADIO: |
| 1362 return ROLE_SYSTEM_MENUITEM; | 1369 return ROLE_SYSTEM_MENUITEM; |
| 1363 | 1370 |
| 1364 case ui::AX_ROLE_MENU_LIST_POPUP: | 1371 case ui::AX_ROLE_MENU_LIST_POPUP: |
| 1365 return ROLE_SYSTEM_LIST; | 1372 return ROLE_SYSTEM_LIST; |
| 1366 | 1373 |
| 1367 case ui::AX_ROLE_MENU_LIST_OPTION: | 1374 case ui::AX_ROLE_MENU_LIST_OPTION: |
| 1368 return ROLE_SYSTEM_LISTITEM; | 1375 return ROLE_SYSTEM_LISTITEM; |
| 1369 | 1376 |
| 1377 case ui::AX_ROLE_METER: | |
| 1378 return ROLE_SYSTEM_PROGRESSBAR; | |
| 1379 | |
| 1370 case ui::AX_ROLE_NAVIGATION: | 1380 case ui::AX_ROLE_NAVIGATION: |
| 1371 return ROLE_SYSTEM_GROUPING; | 1381 return ROLE_SYSTEM_GROUPING; |
| 1372 | 1382 |
| 1373 case ui::AX_ROLE_NOTE: | 1383 case ui::AX_ROLE_NOTE: |
| 1374 return ROLE_SYSTEM_GROUPING; | 1384 return ROLE_SYSTEM_GROUPING; |
| 1375 | 1385 |
| 1376 case ui::AX_ROLE_OUTLINE: | 1386 case ui::AX_ROLE_OUTLINE: |
| 1377 return ROLE_SYSTEM_OUTLINE; | 1387 return ROLE_SYSTEM_OUTLINE; |
| 1378 | 1388 |
| 1379 case ui::AX_ROLE_POP_UP_BUTTON: { | 1389 case ui::AX_ROLE_POP_UP_BUTTON: { |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 1397 case ui::AX_ROLE_REGION: { | 1407 case ui::AX_ROLE_REGION: { |
| 1398 std::string html_tag = GetData().GetStringAttribute(ui::AX_ATTR_HTML_TAG); | 1408 std::string html_tag = GetData().GetStringAttribute(ui::AX_ATTR_HTML_TAG); |
| 1399 if (html_tag == "section") | 1409 if (html_tag == "section") |
| 1400 return ROLE_SYSTEM_GROUPING; | 1410 return ROLE_SYSTEM_GROUPING; |
| 1401 return ROLE_SYSTEM_PANE; | 1411 return ROLE_SYSTEM_PANE; |
| 1402 } | 1412 } |
| 1403 | 1413 |
| 1404 case ui::AX_ROLE_ROW: { | 1414 case ui::AX_ROLE_ROW: { |
| 1405 // Role changes depending on whether row is inside a treegrid | 1415 // Role changes depending on whether row is inside a treegrid |
| 1406 // https://www.w3.org/TR/core-aam-1.1/#role-map-row | 1416 // https://www.w3.org/TR/core-aam-1.1/#role-map-row |
| 1407 auto* container = FromNativeViewAccessible(GetParent()); | 1417 return IsInTreeGrid() ? ROLE_SYSTEM_OUTLINEITEM : ROLE_SYSTEM_ROW; |
| 1408 if (container && container->GetData().role == ui::AX_ROLE_GROUP) { | |
| 1409 // If parent was a rowgroup, we need to look at the grandparent | |
| 1410 container = FromNativeViewAccessible(container->GetParent()); | |
| 1411 } | |
| 1412 | |
| 1413 if (!container) | |
| 1414 return ROLE_SYSTEM_ROW; | |
| 1415 | |
| 1416 return ROLE_SYSTEM_OUTLINEITEM; | |
| 1417 } | 1418 } |
| 1418 | 1419 |
| 1419 case ui::AX_ROLE_ROW_HEADER: | 1420 case ui::AX_ROLE_ROW_HEADER: |
| 1420 return ROLE_SYSTEM_ROWHEADER; | 1421 return ROLE_SYSTEM_ROWHEADER; |
| 1421 | 1422 |
| 1422 case ui::AX_ROLE_RUBY: | 1423 case ui::AX_ROLE_RUBY: |
| 1423 return ROLE_SYSTEM_TEXT; | 1424 return ROLE_SYSTEM_TEXT; |
| 1424 | 1425 |
| 1425 case ui::AX_ROLE_RULER: | 1426 case ui::AX_ROLE_RULER: |
| 1426 return ROLE_SYSTEM_CLIENT; | 1427 return ROLE_SYSTEM_CLIENT; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1506 | 1507 |
| 1507 case ui::AX_ROLE_LINE_BREAK: | 1508 case ui::AX_ROLE_LINE_BREAK: |
| 1508 return ROLE_SYSTEM_WHITESPACE; | 1509 return ROLE_SYSTEM_WHITESPACE; |
| 1509 | 1510 |
| 1510 case ui::AX_ROLE_VIDEO: | 1511 case ui::AX_ROLE_VIDEO: |
| 1511 return ROLE_SYSTEM_GROUPING; | 1512 return ROLE_SYSTEM_GROUPING; |
| 1512 | 1513 |
| 1513 case ui::AX_ROLE_WINDOW: | 1514 case ui::AX_ROLE_WINDOW: |
| 1514 return ROLE_SYSTEM_WINDOW; | 1515 return ROLE_SYSTEM_WINDOW; |
| 1515 | 1516 |
| 1516 // TODO(dmazzoni): figure out the proper MSAA role for roles not called out | 1517 // TODO(dmazzoni): figure out the proper MSAA role for roles listed below. |
| 1517 // here. | 1518 case AX_ROLE_BLOCKQUOTE: |
| 1518 default: | 1519 case AX_ROLE_BUTTON_DROP_DOWN: |
| 1520 case AX_ROLE_CARET: | |
| 1521 case AX_ROLE_CLIENT: | |
| 1522 case AX_ROLE_DEFINITION: | |
| 1523 case AX_ROLE_DESKTOP: | |
| 1524 case AX_ROLE_DIRECTORY: | |
| 1525 case AX_ROLE_FIGCAPTION: | |
| 1526 case AX_ROLE_FOOTER: | |
| 1527 case AX_ROLE_FORM: | |
| 1528 case AX_ROLE_IGNORED: | |
| 1529 case AX_ROLE_IMAGE_MAP: | |
| 1530 case AX_ROLE_INLINE_TEXT_BOX: | |
| 1531 case AX_ROLE_LOCATION_BAR: | |
| 1532 case AX_ROLE_LOG: | |
| 1533 case AX_ROLE_NONE: | |
| 1534 case AX_ROLE_PANE: | |
| 1535 case AX_ROLE_PARAGRAPH: | |
| 1536 case AX_ROLE_PRESENTATIONAL: | |
| 1537 case AX_ROLE_SEAMLESS_WEB_AREA: | |
| 1538 case AX_ROLE_SLIDER_THUMB: | |
| 1539 case AX_ROLE_SWITCH: | |
| 1540 case AX_ROLE_TAB_GROUP: | |
| 1541 case AX_ROLE_TITLE_BAR: | |
| 1542 case AX_ROLE_UNKNOWN: | |
| 1543 case AX_ROLE_WEB_VIEW: | |
| 1519 return ROLE_SYSTEM_CLIENT; | 1544 return ROLE_SYSTEM_CLIENT; |
| 1520 } | 1545 } |
| 1546 | |
| 1547 NOTREACHED(); | |
| 1548 return ROLE_SYSTEM_CLIENT; | |
| 1521 } | 1549 } |
| 1522 | 1550 |
| 1523 std::string AXPlatformNodeWin::StringOverrideForMSAARole() { | 1551 std::string AXPlatformNodeWin::StringOverrideForMSAARole() { |
| 1524 std::string html_tag = GetData().GetStringAttribute(ui::AX_ATTR_HTML_TAG); | 1552 std::string html_tag = GetData().GetStringAttribute(ui::AX_ATTR_HTML_TAG); |
| 1525 | 1553 |
| 1526 switch (GetData().role) { | 1554 switch (GetData().role) { |
| 1527 case ui::AX_ROLE_BLOCKQUOTE: | 1555 case ui::AX_ROLE_BLOCKQUOTE: |
| 1528 case ui::AX_ROLE_DEFINITION: | 1556 case ui::AX_ROLE_DEFINITION: |
| 1529 case ui::AX_ROLE_IMAGE_MAP: | 1557 case ui::AX_ROLE_IMAGE_MAP: |
| 1530 return html_tag; | 1558 return html_tag; |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 1557 case ui::AX_ROLE_SWITCH: | 1585 case ui::AX_ROLE_SWITCH: |
| 1558 return "switch"; | 1586 return "switch"; |
| 1559 | 1587 |
| 1560 default: | 1588 default: |
| 1561 return ""; | 1589 return ""; |
| 1562 } | 1590 } |
| 1563 | 1591 |
| 1564 return ""; | 1592 return ""; |
| 1565 } | 1593 } |
| 1566 | 1594 |
| 1595 bool AXPlatformNodeWin::IsWebAreaForPresentationalIframe() { | |
| 1596 if (GetData().role != ui::AX_ROLE_WEB_AREA && | |
| 1597 GetData().role != ui::AX_ROLE_ROOT_WEB_AREA) { | |
| 1598 return false; | |
| 1599 } | |
| 1600 | |
| 1601 auto* parent = FromNativeViewAccessible(GetParent()); | |
| 1602 if (!parent) | |
| 1603 return false; | |
| 1604 | |
| 1605 return parent->GetData().role == ui::AX_ROLE_IFRAME_PRESENTATIONAL; | |
| 1606 } | |
| 1607 | |
| 1567 bool AXPlatformNodeWin::ShouldNodeHaveReadonlyState( | 1608 bool AXPlatformNodeWin::ShouldNodeHaveReadonlyState( |
| 1568 const AXNodeData& data) const { | 1609 const AXNodeData& data) const { |
| 1569 if (data.GetBoolAttribute(ui::AX_ATTR_ARIA_READONLY)) | 1610 if (data.GetBoolAttribute(ui::AX_ATTR_ARIA_READONLY)) |
| 1570 return true; | 1611 return true; |
| 1571 | 1612 |
| 1572 if (!data.HasState(ui::AX_STATE_READ_ONLY)) | 1613 if (!data.HasState(ui::AX_STATE_READ_ONLY)) |
| 1573 return false; | 1614 return false; |
| 1574 | 1615 |
| 1575 switch (data.role) { | 1616 switch (data.role) { |
| 1576 case ui::AX_ROLE_ARTICLE: | 1617 case ui::AX_ROLE_ARTICLE: |
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1884 return nullptr; | 1925 return nullptr; |
| 1885 | 1926 |
| 1886 AXPlatformNodeBase* base = | 1927 AXPlatformNodeBase* base = |
| 1887 FromNativeViewAccessible(node->GetNativeViewAccessible()); | 1928 FromNativeViewAccessible(node->GetNativeViewAccessible()); |
| 1888 if (base && !IsDescendant(base)) | 1929 if (base && !IsDescendant(base)) |
| 1889 base = nullptr; | 1930 base = nullptr; |
| 1890 | 1931 |
| 1891 return static_cast<AXPlatformNodeWin*>(base); | 1932 return static_cast<AXPlatformNodeWin*>(base); |
| 1892 } | 1933 } |
| 1893 | 1934 |
| 1935 bool AXPlatformNodeWin::IsInTreeGrid() { | |
| 1936 auto* container = FromNativeViewAccessible(GetParent()); | |
| 1937 | |
| 1938 if (container && container->GetData().role == ui::AX_ROLE_GROUP) { | |
| 1939 // If parent was a rowgroup, we need to look at the grandparent | |
|
dmazzoni
2017/07/06 22:48:28
nit: move comment above and get rid of {}
dougt
2017/07/11 17:37:44
Done.
| |
| 1940 container = FromNativeViewAccessible(container->GetParent()); | |
| 1941 } | |
| 1942 | |
| 1943 if (!container) { | |
|
dmazzoni
2017/07/06 22:48:28
nit: remove {}
dougt
2017/07/11 17:37:44
Done.
| |
| 1944 return false; | |
| 1945 } | |
| 1946 | |
| 1947 return container->GetData().role == ui::AX_ROLE_TREE_GRID; | |
| 1948 } | |
| 1949 | |
| 1894 } // namespace ui | 1950 } // namespace ui |
| OLD | NEW |