910e62b5创建于 1月15日历史提交
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/accessibility/platform/assistive_tech.h"

#include "base/notreached.h"

namespace ui {

namespace {
static constexpr std::string_view kNoneString{"None"};
static constexpr std::string_view kUninitializedString{"Uninitialized"};
static constexpr std::string_view kChromeVoxString{"ChromeVox"};
static constexpr std::string_view kJawsString{"Jaws"};
static constexpr std::string_view kNarratorString{"Narrator"};
static constexpr std::string_view kNvdaString{"Nvda"};
static constexpr std::string_view kOrcaString{"Orca"};
static constexpr std::string_view kSupernovaString{"Supernova"};
static constexpr std::string_view kTalkbackString{"Talkback"};
static constexpr std::string_view kVoiceOverString{"VoiceOver"};
static constexpr std::string_view kZdsrString{"Zdsr"};
static constexpr std::string_view kWinMagnifierString{"Magnifier"};
static constexpr std::string_view kZoomTextString{"ZoomText"};
static constexpr std::string_view kGenericScreenReaderString{
    "GenericScreenReader"};
}  // namespace

bool IsScreenReader(AssistiveTech assistive_tech) {
  switch (assistive_tech) {
    // On some operating systems, we don't know if a screen reader is running
    // until some expensive operations are performed off-thread.
    // assume there is a not screen reader in this case, as this is generally
    // the most appropriate for most call sites.
    case AssistiveTech::kUninitialized:
    case AssistiveTech::kNone:
      return false;
    case AssistiveTech::kChromeVox:
    case AssistiveTech::kJaws:
    case AssistiveTech::kNarrator:
    case AssistiveTech::kNvda:
    case AssistiveTech::kOrca:
    case AssistiveTech::kSupernova:
    case AssistiveTech::kTalkback:
    case AssistiveTech::kVoiceOver:
    case AssistiveTech::kZdsr:
    // ZoomText And Windows Magnifier are screen magnifier with some screen
    // reader features, such as the ability to navigate by heading.
    case AssistiveTech::kWinMagnifier:
    case AssistiveTech::kZoomText:
    case AssistiveTech::kGenericScreenReader:
      return true;
  }
}

std::string_view GetAssistiveTechString(AssistiveTech assistive_tech) {
  switch (assistive_tech) {
    case AssistiveTech::kNone:
      return kNoneString;
    case AssistiveTech::kUninitialized:
      return kUninitializedString;
    case AssistiveTech::kChromeVox:
      return kChromeVoxString;
    case AssistiveTech::kJaws:
      return kJawsString;
    case AssistiveTech::kNarrator:
      return kNarratorString;
    case AssistiveTech::kNvda:
      return kNvdaString;
    case AssistiveTech::kOrca:
      return kOrcaString;
    case AssistiveTech::kSupernova:
      return kSupernovaString;
    case AssistiveTech::kTalkback:
      return kTalkbackString;
    case AssistiveTech::kVoiceOver:
      return kVoiceOverString;
    case AssistiveTech::kZdsr:
      return kZdsrString;
    case AssistiveTech::kWinMagnifier:
      return kWinMagnifierString;
    case AssistiveTech::kZoomText:
      return kZoomTextString;
    case AssistiveTech::kGenericScreenReader:
      return kGenericScreenReaderString;
  }
}

}  // namespace ui