// Copyright 2022 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/inspect/ax_target_win.h"
#include "base/strings/string_number_conversions.h"
namespace ui {
AXTargetWin::AXTargetWin() = default;
AXTargetWin::AXTargetWin(std::nullptr_t) : value_(nullptr) {}
AXTargetWin::AXTargetWin(const AXTargetWin&) = default;
AXTargetWin::AXTargetWin(AXTargetWin&&) = default;
AXTargetWin::~AXTargetWin() = default;
std::string AXTargetWin::ToString() const {
if (!value_)
return "NULL";
if (Is<IAccessibleComPtr>())
return "IAccessible";
if (Is<IA2ComPtr>())
return "IAccessible2Interface";
if (Is<IA2HypertextComPtr>())
return "IAccessible2HyperlinkInferface";
if (Is<IA2TableComPtr>())
return "IAccessible2TableInterface";
if (Is<IA2TableCellComPtr>())
return "IAccessible2TableCellInterface";
if (Is<IA2TextComPtr>())
return "IAccessible2TextInterface";
if (Is<IA2TextSelectionContainerComPtr>()) {
return "IA2TextSelectionContainerComPtr";
}
if (Is<IA2ValueComPtr>())
return "IAccessible2ValueInterface";
if (Is<std::string>())
return "\"" + As<std::string>() + "\"";
if (Is<int>())
return base::NumberToString(As<int>());
if (Is<ScopedCoMemArray<LONG>>()) {
std::string str;
for (LONG value : As<ScopedCoMemArray<LONG>>()) {
if (!str.empty()) {
str += ", ";
}
str += base::NumberToString(value);
}
return '[' + str + ']';
}
if (Is<ScopedCoMemArray<IA2TextSelection>>()) {
std::string str;
for (const IA2TextSelection& selection :
As<ScopedCoMemArray<IA2TextSelection>>()) {
if (!str.empty()) {
str += ", ";
}
// TODO(alexs): replace <obj> on something more useful.
// It could be a line number the accessible object is placed at in
// the stringified accessible tree, potentially including additional
// properties making the accessible object identification easier such as
// DOM id or accessible role/name, for instance, :3.textbox.
str += "{startObj: <obj>, startOffset: " +
base::NumberToString(selection.startOffset) +
", endObj: <obj>, endOffset: " +
base::NumberToString(selection.endOffset) + "}";
}
return '[' + str + ']';
}
return "Unsupported";
}
} // namespace ui