| // Copyright 2019 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 "ax_mode.h" |
| |
| #include <vector> |
| |
| #include "base/logging.h" |
| #include "base/string_utils.h" |
| |
| namespace ui { |
| |
| std::ostream& operator<<(std::ostream& stream, const AXMode& mode) { |
| return stream << mode.ToString(); |
| } |
| |
| std::string AXMode::ToString() const { |
| std::vector<std::string> tokens; |
| |
| // Written as a loop with a switch so that this crashes if a new |
| // mode flag is added without adding support for logging it. |
| for (uint32_t mode_flag = AXMode::kFirstModeFlag; |
| mode_flag <= AXMode::kLastModeFlag; mode_flag = mode_flag << 1) { |
| const char* flag_name = nullptr; |
| switch (mode_flag) { |
| case AXMode::kNativeAPIs: |
| flag_name = "kNativeAPIs"; |
| break; |
| case AXMode::kWebContents: |
| flag_name = "kWebContents"; |
| break; |
| case AXMode::kInlineTextBoxes: |
| flag_name = "kInlineTextBoxes"; |
| break; |
| case AXMode::kScreenReader: |
| flag_name = "kScreenReader"; |
| break; |
| case AXMode::kHTML: |
| flag_name = "kHTML"; |
| break; |
| case AXMode::kLabelImages: |
| flag_name = "kLabelImages"; |
| break; |
| case AXMode::kPDF: |
| flag_name = "kPDF"; |
| break; |
| } |
| |
| BASE_DCHECK(flag_name); |
| |
| if (has_mode(mode_flag)) |
| tokens.push_back(flag_name); |
| } |
| |
| return base::JoinString(tokens, " | "); |
| } |
| |
| } // namespace ui |