1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "ui/accessibility/ax_mode.h" 6 7 #include <vector> 8 9 #include "base/strings/string_piece.h" 10 #include "base/strings/string_util.h" 11 12 namespace ui { 13 operator <<(std::ostream & stream,const AXMode & mode)14std::ostream& operator<<(std::ostream& stream, const AXMode& mode) { 15 return stream << mode.ToString(); 16 } 17 ToString() const18std::string AXMode::ToString() const { 19 std::vector<base::StringPiece> tokens; 20 21 // Written as a loop with a switch so that this crashes if a new 22 // mode flag is added without adding support for logging it. 23 for (uint32_t mode_flag = AXMode::kFirstModeFlag; 24 mode_flag <= AXMode::kLastModeFlag; mode_flag = mode_flag << 1) { 25 base::StringPiece flag_name; 26 switch (mode_flag) { 27 case AXMode::kNativeAPIs: 28 flag_name = "kNativeAPIs"; 29 break; 30 case AXMode::kWebContents: 31 flag_name = "kWebContents"; 32 break; 33 case AXMode::kInlineTextBoxes: 34 flag_name = "kInlineTextBoxes"; 35 break; 36 case AXMode::kScreenReader: 37 flag_name = "kScreenReader"; 38 break; 39 case AXMode::kHTML: 40 flag_name = "kHTML"; 41 break; 42 case AXMode::kLabelImages: 43 flag_name = "kLabelImages"; 44 break; 45 case AXMode::kPDF: 46 flag_name = "kPDF"; 47 break; 48 } 49 50 DCHECK(!flag_name.empty()); 51 52 if (has_mode(mode_flag)) 53 tokens.push_back(flag_name); 54 } 55 return base::JoinString(tokens, " | "); 56 } 57 58 } // namespace ui 59