| // 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. | 
 |  | 
 | #ifndef UI_ACCESSIBILITY_PLATFORM_AX_MODE_H_ | 
 | #define UI_ACCESSIBILITY_PLATFORM_AX_MODE_H_ | 
 |  | 
 | namespace ui { | 
 |  | 
 | class AXMode { | 
 |  public: | 
 |   // Native accessibility APIs, specific to each platform, are enabled. | 
 |   // When this mode is set that indicates the presence of a third-party | 
 |   // client accessing Chrome via accessibility APIs. However, unless one | 
 |   // of the modes below is set, the contents of web pages will not be | 
 |   // accessible. | 
 |   static constexpr uint32_t kNativeAPIs = 1 << 0; | 
 |  | 
 |   // The renderer process will generate an accessibility tree containing | 
 |   // basic information about all nodes, including role, name, value, | 
 |   // state, and location. This is the minimum mode required in order for | 
 |   // web contents to be accessible, and the remaining modes are meaningless | 
 |   // unless this one is set. | 
 |   // | 
 |   // Note that sometimes this mode will be set when kNativeAPI is not, when the | 
 |   // content layer embedder is providing accessibility support via some other | 
 |   // mechanism other than what's implemented in content/browser. | 
 |   static constexpr uint32_t kWebContents = 1 << 1; | 
 |  | 
 |   // The accessibility tree will contain inline text boxes, which are | 
 |   // necessary to expose information about line breaks and word boundaries. | 
 |   // Without this mode, you can retrieve the plaintext value of a text field | 
 |   // but not the information about how it's broken down into lines. | 
 |   // | 
 |   // Note that when this mode is off it's still possible to request inline | 
 |   // text boxes for a specific node on-demand, asynchronously. | 
 |   static constexpr uint32_t kInlineTextBoxes = 1 << 2; | 
 |  | 
 |   // The accessibility tree will contain extra accessibility | 
 |   // attributes typically only needed by screen readers and other | 
 |   // assistive technology for blind users. Examples include text style | 
 |   // attributes, table cell information, live region properties, range | 
 |   // values, and relationship attributes. | 
 |   static constexpr uint32_t kScreenReader = 1 << 3; | 
 |  | 
 |   // The accessibility tree will contain the HTML tag name and HTML attributes | 
 |   // for all accessibility nodes that come from web content. | 
 |   static constexpr uint32_t kHTML = 1 << 4; | 
 |  | 
 |   constexpr AXMode() : flags_(0) {} | 
 |   constexpr AXMode(uint32_t flags) : flags_(flags) {} | 
 |  | 
 |   bool has_mode(uint32_t flag) const { return (flags_ & flag) > 0; } | 
 |  | 
 |   void set_mode(uint32_t flag, bool value) { | 
 |     flags_ = value ? (flags_ | flag) : (flags_ & ~flag); | 
 |   } | 
 |  | 
 |   uint32_t mode() const { return flags_; } | 
 |  | 
 |   bool operator==(AXMode rhs) const { | 
 |     if (flags_ == rhs.flags_) | 
 |       return true; | 
 |     return false; | 
 |   } | 
 |  | 
 |   bool is_mode_off() const { return flags_ == 0; } | 
 |  | 
 |   bool operator!=(AXMode rhs) const { return !(*this == rhs); } | 
 |  | 
 |   AXMode& operator|=(const AXMode& rhs) { | 
 |     flags_ |= rhs.flags_; | 
 |     return *this; | 
 |   } | 
 |  | 
 |  private: | 
 |   uint32_t flags_; | 
 | }; | 
 |  | 
 | static constexpr AXMode kAXModeWebContentsOnly(AXMode::kWebContents | | 
 |                                                AXMode::kInlineTextBoxes | | 
 |                                                AXMode::kScreenReader | | 
 |                                                AXMode::kHTML); | 
 |  | 
 | static constexpr AXMode kAXModeComplete(AXMode::kNativeAPIs | | 
 |                                         AXMode::kWebContents | | 
 |                                         AXMode::kInlineTextBoxes | | 
 |                                         AXMode::kScreenReader | AXMode::kHTML); | 
 |  | 
 | }  // namespace ui | 
 |  | 
 | #endif  // UI_ACCESSIBILITY_PLATFORM_AX_MODE_H_ |