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

Side by Side Diff: ui/accessibility/platform/ax_platform_node_win.cc

Issue 2913553002: Forward BrowserAccessibility get_accState to AXPlatformNode. (Closed)
Patch Set: rename and switch boolean values Created 3 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 unified diff | Download patch
OLDNEW
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 1420 matching lines...) Expand 10 before | Expand all | Expand 10 after
1431 if (state & (1 << ui::AX_STATE_COLLAPSED)) 1431 if (state & (1 << ui::AX_STATE_COLLAPSED))
1432 msaa_state |= STATE_SYSTEM_COLLAPSED; 1432 msaa_state |= STATE_SYSTEM_COLLAPSED;
1433 if (state & (1 << ui::AX_STATE_DEFAULT)) 1433 if (state & (1 << ui::AX_STATE_DEFAULT))
1434 msaa_state |= STATE_SYSTEM_DEFAULT; 1434 msaa_state |= STATE_SYSTEM_DEFAULT;
1435 if (state & (1 << ui::AX_STATE_EXPANDED)) 1435 if (state & (1 << ui::AX_STATE_EXPANDED))
1436 msaa_state |= STATE_SYSTEM_EXPANDED; 1436 msaa_state |= STATE_SYSTEM_EXPANDED;
1437 if (state & (1 << ui::AX_STATE_FOCUSABLE)) 1437 if (state & (1 << ui::AX_STATE_FOCUSABLE))
1438 msaa_state |= STATE_SYSTEM_FOCUSABLE; 1438 msaa_state |= STATE_SYSTEM_FOCUSABLE;
1439 if (state & (1 << ui::AX_STATE_HASPOPUP)) 1439 if (state & (1 << ui::AX_STATE_HASPOPUP))
1440 msaa_state |= STATE_SYSTEM_HASPOPUP; 1440 msaa_state |= STATE_SYSTEM_HASPOPUP;
1441 if (state & (1 << ui::AX_STATE_HOVERED)) 1441
1442 msaa_state |= STATE_SYSTEM_HOTTRACKED;
1443 if (state & (1 << ui::AX_STATE_INVISIBLE) || 1442 if (state & (1 << ui::AX_STATE_INVISIBLE) ||
1444 GetData().role == ui::AX_ROLE_IGNORED) { 1443 GetData().role == ui::AX_ROLE_IGNORED) {
1445 msaa_state |= STATE_SYSTEM_INVISIBLE; 1444 msaa_state |= STATE_SYSTEM_INVISIBLE;
1446 } 1445 }
1447 if (state & (1 << ui::AX_STATE_LINKED)) 1446 if (state & (1 << ui::AX_STATE_LINKED))
1448 msaa_state |= STATE_SYSTEM_LINKED; 1447 msaa_state |= STATE_SYSTEM_LINKED;
1449 if (state & (1 << ui::AX_STATE_OFFSCREEN)) 1448 if (state & (1 << ui::AX_STATE_OFFSCREEN))
1450 msaa_state |= STATE_SYSTEM_OFFSCREEN; 1449 msaa_state |= STATE_SYSTEM_OFFSCREEN;
1451 if (state & (1 << ui::AX_STATE_PROTECTED)) 1450 if (state & (1 << ui::AX_STATE_PROTECTED))
1452 msaa_state |= STATE_SYSTEM_PROTECTED; 1451 msaa_state |= STATE_SYSTEM_PROTECTED;
1453 if (state & (1 << ui::AX_STATE_READ_ONLY)) 1452 if (state & (1 << ui::AX_STATE_READ_ONLY))
1454 msaa_state |= STATE_SYSTEM_READONLY; 1453 msaa_state |= STATE_SYSTEM_READONLY;
1455 if (state & (1 << ui::AX_STATE_SELECTABLE)) 1454 if (state & (1 << ui::AX_STATE_SELECTABLE))
1456 msaa_state |= STATE_SYSTEM_SELECTABLE; 1455 msaa_state |= STATE_SYSTEM_SELECTABLE;
1457 if (state & (1 << ui::AX_STATE_SELECTED)) 1456 if (state & (1 << ui::AX_STATE_SELECTED))
1458 msaa_state |= STATE_SYSTEM_SELECTED; 1457 msaa_state |= STATE_SYSTEM_SELECTED;
1459 if (state & (1 << ui::AX_STATE_DISABLED)) 1458 if (state & (1 << ui::AX_STATE_DISABLED))
1460 msaa_state |= STATE_SYSTEM_UNAVAILABLE; 1459 msaa_state |= STATE_SYSTEM_UNAVAILABLE;
1460 if (state & (1 << ui::AX_STATE_BUSY))
1461 msaa_state |= STATE_SYSTEM_BUSY;
1462 if (state & (1 << ui::AX_STATE_VISITED))
1463 msaa_state |= STATE_SYSTEM_TRAVERSED;
1464
1465 if (state & (1 << ui::AX_STATE_MULTISELECTABLE)) {
1466 msaa_state |= STATE_SYSTEM_EXTSELECTABLE;
1467 msaa_state |= STATE_SYSTEM_MULTISELECTABLE;
1468 }
1469
1470 // Expose whether or not the mouse is over an element, but suppress
1471 // this for tests because it can make the test results flaky depending
1472 // on the position of the mouse.
1473 if (delegate_->ShouldIgnoreHoveredStateForTesting()) {
1474 if (state & (1 << ui::AX_STATE_HOVERED))
1475 msaa_state |= STATE_SYSTEM_HOTTRACKED;
1476 }
1461 1477
1462 // Checked state 1478 // Checked state
1463 const auto checked_state = static_cast<ui::AXCheckedState>( 1479 const auto checked_state = static_cast<ui::AXCheckedState>(
1464 GetIntAttribute(ui::AX_ATTR_CHECKED_STATE)); 1480 GetIntAttribute(ui::AX_ATTR_CHECKED_STATE));
1465 switch (checked_state) { 1481 switch (checked_state) {
1466 case ui::AX_CHECKED_STATE_TRUE: 1482 case ui::AX_CHECKED_STATE_TRUE:
1467 msaa_state |= data.role == ui::AX_ROLE_TOGGLE_BUTTON 1483 msaa_state |= data.role == ui::AX_ROLE_TOGGLE_BUTTON
1468 ? STATE_SYSTEM_PRESSED 1484 ? STATE_SYSTEM_PRESSED
1469 : STATE_SYSTEM_CHECKED; 1485 : STATE_SYSTEM_CHECKED;
1470 break; 1486 break;
(...skipping 12 matching lines...) Expand all
1483 // menu bars, when visible. 1499 // menu bars, when visible.
1484 // 1500 //
1485 // TODO(dmazzoni): this should probably check if focus is actually inside 1501 // TODO(dmazzoni): this should probably check if focus is actually inside
1486 // the menu bar, but we don't currently track focus inside menu pop-ups, 1502 // the menu bar, but we don't currently track focus inside menu pop-ups,
1487 // and Chrome only has one menu visible at a time so this works for now. 1503 // and Chrome only has one menu visible at a time so this works for now.
1488 if (data.role == ui::AX_ROLE_MENU_BAR && 1504 if (data.role == ui::AX_ROLE_MENU_BAR &&
1489 !(state & (1 << ui::AX_STATE_INVISIBLE))) { 1505 !(state & (1 << ui::AX_STATE_INVISIBLE))) {
1490 msaa_state |= STATE_SYSTEM_FOCUSED; 1506 msaa_state |= STATE_SYSTEM_FOCUSED;
1491 } 1507 }
1492 1508
1509 switch (GetData().role) {
1510 case ui::AX_ROLE_ARTICLE:
1511 case ui::AX_ROLE_BUSY_INDICATOR:
1512 case ui::AX_ROLE_DEFINITION:
1513 case ui::AX_ROLE_DESCRIPTION_LIST:
1514 case ui::AX_ROLE_DESCRIPTION_LIST_TERM:
1515 case ui::AX_ROLE_IFRAME:
1516 case ui::AX_ROLE_IMAGE:
1517 case ui::AX_ROLE_IMAGE_MAP:
1518 case ui::AX_ROLE_LIST:
1519 case ui::AX_ROLE_LIST_ITEM:
1520 case ui::AX_ROLE_PROGRESS_INDICATOR:
1521 case ui::AX_ROLE_RULER:
1522 case ui::AX_ROLE_SCROLL_AREA:
1523 case ui::AX_ROLE_TABLE_HEADER_CONTAINER:
1524 case ui::AX_ROLE_TERM:
1525 case ui::AX_ROLE_TIMER:
1526 case ui::AX_ROLE_TOOLBAR:
1527 case ui::AX_ROLE_TOOLTIP:
1528 msaa_state |= STATE_SYSTEM_READONLY;
1529 break;
1530
1531 case ui::AX_ROLE_DOCUMENT:
1532 case ui::AX_ROLE_ROOT_WEB_AREA:
1533 case ui::AX_ROLE_WEB_AREA:
1534 msaa_state |= STATE_SYSTEM_READONLY;
1535 msaa_state |= STATE_SYSTEM_FOCUSABLE;
1536 break;
1537
1538 case ui::AX_ROLE_GRID:
1539 // TODO(aleventhal) this changed between ARIA 1.0 and 1.1,
1540 // need to determine whether grids/treegrids should really be readonly
1541 // or editable by default
1542 // msaa_state |= STATE_SYSTEM_READONLY;
1543 break;
1544
1545 case ui::AX_ROLE_IMAGE_MAP_LINK:
1546 msaa_state |= STATE_SYSTEM_LINKED;
1547 msaa_state |= STATE_SYSTEM_READONLY;
1548 break;
1549
1550 case ui::AX_ROLE_LINK:
1551 msaa_state |= STATE_SYSTEM_LINKED;
1552 break;
1553
1554 case ui::AX_ROLE_LIST_BOX_OPTION:
1555 if (msaa_state & STATE_SYSTEM_SELECTABLE) {
1556 msaa_state |= STATE_SYSTEM_FOCUSABLE;
1557 }
1558 break;
1559
1560 case ui::AX_ROLE_MENU_LIST_OPTION:
1561 if (msaa_state & STATE_SYSTEM_SELECTABLE) {
1562 msaa_state |= STATE_SYSTEM_FOCUSABLE;
1563 }
1564 break;
1565
1566 case ui::AX_ROLE_TEXT_FIELD:
1567 case ui::AX_ROLE_SEARCH_BOX:
1568 if (state & (1 << ui::AX_STATE_READ_ONLY))
1569 msaa_state |= STATE_SYSTEM_READONLY;
1570 break;
1571 default:
1572 break;
1573 }
1574
1575 // Compute the final value of READONLY for MSAA.
1576 //
1577 // We always set the READONLY state for elements that have the
1578 // aria-readonly attribute and for a few roles (in the switch above),
1579 // including read-only text fields.
1580 // The majority of focusable controls should not have the read-only state set.
1581 if (state & (1 << ui::AX_STATE_FOCUSABLE) &&
1582 GetData().role != ROLE_SYSTEM_DOCUMENT &&
dmazzoni 2017/06/14 17:13:16 This is the bug. GetData().role is a ui::AXRole R
1583 GetData().role != ROLE_SYSTEM_TEXT) {
1584 msaa_state &= ~(STATE_SYSTEM_READONLY);
1585 }
1586 if (!(state & (1 << ui::AX_STATE_READ_ONLY)))
1587 msaa_state &= ~(STATE_SYSTEM_READONLY);
1588
1589 if (GetData().GetBoolAttribute(ui::AX_ATTR_ARIA_READONLY))
1590 msaa_state |= STATE_SYSTEM_READONLY;
1591
1493 return msaa_state; 1592 return msaa_state;
1494 } 1593 }
1495 1594
1496 int AXPlatformNodeWin::MSAAEvent(ui::AXEvent event) { 1595 int AXPlatformNodeWin::MSAAEvent(ui::AXEvent event) {
1497 switch (event) { 1596 switch (event) {
1498 case ui::AX_EVENT_ALERT: 1597 case ui::AX_EVENT_ALERT:
1499 return EVENT_SYSTEM_ALERT; 1598 return EVENT_SYSTEM_ALERT;
1500 case ui::AX_EVENT_FOCUS: 1599 case ui::AX_EVENT_FOCUS:
1501 return EVENT_OBJECT_FOCUS; 1600 return EVENT_OBJECT_FOCUS;
1502 case ui::AX_EVENT_MENU_START: 1601 case ui::AX_EVENT_MENU_START:
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1616 1715
1617 AXPlatformNodeBase* base = 1716 AXPlatformNodeBase* base =
1618 FromNativeViewAccessible(node->GetNativeViewAccessible()); 1717 FromNativeViewAccessible(node->GetNativeViewAccessible());
1619 if (base && !IsDescendant(base)) 1718 if (base && !IsDescendant(base))
1620 base = nullptr; 1719 base = nullptr;
1621 1720
1622 return static_cast<AXPlatformNodeWin*>(base); 1721 return static_cast<AXPlatformNodeWin*>(base);
1623 } 1722 }
1624 1723
1625 } // namespace ui 1724 } // namespace ui
OLDNEW
« no previous file with comments | « ui/accessibility/platform/ax_platform_node_delegate.h ('k') | ui/accessibility/platform/test_ax_node_wrapper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698