| // Copyright 2017 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "ui/accessibility/ax_role_properties.h" | 
 | #include "build/build_config.h" | 
 |  | 
 | namespace ui { | 
 |  | 
 | namespace { | 
 | #if defined(OS_WIN) | 
 | static bool kExposeLayoutTableAsDataTable = true; | 
 | #else | 
 | static bool kExposeLayoutTableAsDataTable = false; | 
 | #endif | 
 | }  // namespace | 
 |  | 
 | bool IsRoleClickable(ax::mojom::Role role) { | 
 |   switch (role) { | 
 |     case ax::mojom::Role::kButton: | 
 |     case ax::mojom::Role::kCheckBox: | 
 |     case ax::mojom::Role::kColorWell: | 
 |     case ax::mojom::Role::kDisclosureTriangle: | 
 |     case ax::mojom::Role::kLink: | 
 |     case ax::mojom::Role::kListBoxOption: | 
 |     case ax::mojom::Role::kMenuButton: | 
 |     case ax::mojom::Role::kMenuItem: | 
 |     case ax::mojom::Role::kMenuItemCheckBox: | 
 |     case ax::mojom::Role::kMenuItemRadio: | 
 |     case ax::mojom::Role::kMenuListOption: | 
 |     case ax::mojom::Role::kMenuListPopup: | 
 |     case ax::mojom::Role::kPopUpButton: | 
 |     case ax::mojom::Role::kRadioButton: | 
 |     case ax::mojom::Role::kSwitch: | 
 |     case ax::mojom::Role::kTab: | 
 |     case ax::mojom::Role::kToggleButton: | 
 |       return true; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | bool IsDocument(ax::mojom::Role role) { | 
 |   switch (role) { | 
 |     case ax::mojom::Role::kRootWebArea: | 
 |     case ax::mojom::Role::kWebArea: | 
 |       return true; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | bool IsCellOrTableHeaderRole(ax::mojom::Role role) { | 
 |   switch (role) { | 
 |     case ax::mojom::Role::kCell: | 
 |     case ax::mojom::Role::kColumnHeader: | 
 |     case ax::mojom::Role::kRowHeader: | 
 |       return true; | 
 |     case ax::mojom::Role::kLayoutTableCell: | 
 |       return kExposeLayoutTableAsDataTable; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | bool IsTableLikeRole(ax::mojom::Role role) { | 
 |   switch (role) { | 
 |     case ax::mojom::Role::kTable: | 
 |     case ax::mojom::Role::kGrid: | 
 |     case ax::mojom::Role::kTreeGrid: | 
 |       return true; | 
 |     case ax::mojom::Role::kLayoutTable: | 
 |       return kExposeLayoutTableAsDataTable; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | bool IsContainerWithSelectableChildrenRole(ax::mojom::Role role) { | 
 |   switch (role) { | 
 |     case ax::mojom::Role::kComboBoxGrouping: | 
 |     case ax::mojom::Role::kComboBoxMenuButton: | 
 |     case ax::mojom::Role::kGrid: | 
 |     case ax::mojom::Role::kListBox: | 
 |     case ax::mojom::Role::kMenu: | 
 |     case ax::mojom::Role::kMenuBar: | 
 |     case ax::mojom::Role::kRadioGroup: | 
 |     case ax::mojom::Role::kTabList: | 
 |     case ax::mojom::Role::kToolbar: | 
 |     case ax::mojom::Role::kTree: | 
 |     case ax::mojom::Role::kTreeGrid: | 
 |       return true; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | bool IsRowContainer(ax::mojom::Role role) { | 
 |   switch (role) { | 
 |     case ax::mojom::Role::kTree: | 
 |     case ax::mojom::Role::kTreeGrid: | 
 |     case ax::mojom::Role::kGrid: | 
 |     case ax::mojom::Role::kTable: | 
 |       return true; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | bool IsControl(ax::mojom::Role role) { | 
 |   switch (role) { | 
 |     case ax::mojom::Role::kButton: | 
 |     case ax::mojom::Role::kCheckBox: | 
 |     case ax::mojom::Role::kColorWell: | 
 |     case ax::mojom::Role::kComboBoxMenuButton: | 
 |     case ax::mojom::Role::kDisclosureTriangle: | 
 |     case ax::mojom::Role::kListBox: | 
 |     case ax::mojom::Role::kMenu: | 
 |     case ax::mojom::Role::kMenuBar: | 
 |     case ax::mojom::Role::kMenuButton: | 
 |     case ax::mojom::Role::kMenuItem: | 
 |     case ax::mojom::Role::kMenuItemCheckBox: | 
 |     case ax::mojom::Role::kMenuItemRadio: | 
 |     case ax::mojom::Role::kMenuListOption: | 
 |     case ax::mojom::Role::kMenuListPopup: | 
 |     case ax::mojom::Role::kPopUpButton: | 
 |     case ax::mojom::Role::kRadioButton: | 
 |     case ax::mojom::Role::kScrollBar: | 
 |     case ax::mojom::Role::kSearchBox: | 
 |     case ax::mojom::Role::kSlider: | 
 |     case ax::mojom::Role::kSpinButton: | 
 |     case ax::mojom::Role::kSwitch: | 
 |     case ax::mojom::Role::kTab: | 
 |     case ax::mojom::Role::kTextField: | 
 |     case ax::mojom::Role::kTextFieldWithComboBox: | 
 |     case ax::mojom::Role::kToggleButton: | 
 |     case ax::mojom::Role::kTree: | 
 |       return true; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | bool IsMenuRelated(ax::mojom::Role role) { | 
 |   switch (role) { | 
 |     case ax::mojom::Role::kMenu: | 
 |     case ax::mojom::Role::kMenuBar: | 
 |     case ax::mojom::Role::kMenuButton: | 
 |     case ax::mojom::Role::kMenuItem: | 
 |     case ax::mojom::Role::kMenuItemCheckBox: | 
 |     case ax::mojom::Role::kMenuItemRadio: | 
 |     case ax::mojom::Role::kMenuListOption: | 
 |     case ax::mojom::Role::kMenuListPopup: | 
 |       return true; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | bool IsImage(ax::mojom::Role role) { | 
 |   switch (role) { | 
 |     case ax::mojom::Role::kCanvas: | 
 |     case ax::mojom::Role::kImageMap: | 
 |     case ax::mojom::Role::kImage: | 
 |     case ax::mojom::Role::kSvgRoot: | 
 |     case ax::mojom::Role::kVideo: | 
 |       return true; | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | }  // namespace ui |