1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
// 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.
#ifndef UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_TARGET_WIN_H_
#define UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_TARGET_WIN_H_
#include <wrl/client.h>
#include <string>
#include <variant>
#include "base/component_export.h"
#include "third_party/iaccessible2/ia2_api_all.h"
#include "ui/accessibility/platform/iaccessible2/scoped_co_mem_array.h"
namespace ui {
using IAccessibleComPtr = Microsoft::WRL::ComPtr<IAccessible>;
using IA2ComPtr = Microsoft::WRL::ComPtr<IAccessible2>;
using IA2HypertextComPtr = Microsoft::WRL::ComPtr<IAccessibleHypertext>;
using IA2TableComPtr = Microsoft::WRL::ComPtr<IAccessibleTable>;
using IA2TableCellComPtr = Microsoft::WRL::ComPtr<IAccessibleTableCell>;
using IA2TextComPtr = Microsoft::WRL::ComPtr<IAccessibleText>;
using IA2TextSelectionContainerComPtr =
Microsoft::WRL::ComPtr<IAccessibleTextSelectionContainer>;
using IA2ValueComPtr = Microsoft::WRL::ComPtr<IAccessibleValue>;
class COMPONENT_EXPORT(AX_PLATFORM) AXTargetWin final {
public:
AXTargetWin();
AXTargetWin(std::nullptr_t);
AXTargetWin(const AXTargetWin&);
AXTargetWin(AXTargetWin&&);
template <typename Type>
constexpr AXTargetWin(Type&& v)
: value_(std::make_shared<VariantType>(std::move(v))) {}
~AXTargetWin();
template <typename Type>
bool Is() const {
return value_ && std::holds_alternative<Type>(*value_);
}
template <typename Type>
const Type& As() const {
return std::get<Type>(*value_);
}
std::string ToString() const;
AXTargetWin& operator=(const AXTargetWin&) = default;
AXTargetWin& operator=(AXTargetWin&&) = default;
constexpr bool operator!() const { return value_ == nullptr; }
friend bool operator==(const AXTargetWin&, const AXTargetWin&) = default;
private:
using VariantType = std::variant<std::string,
int,
IAccessibleComPtr,
IA2ComPtr,
IA2HypertextComPtr,
IA2TableComPtr,
IA2TableCellComPtr,
IA2TextComPtr,
IA2TextSelectionContainerComPtr,
IA2ValueComPtr,
ScopedCoMemArray<LONG>,
ScopedCoMemArray<IA2TextSelection>>;
// Keep the value const to prevent accidental change of the value shared
// between multiple instances of AXTargetWin.
std::shared_ptr<const VariantType> value_; // nocheck
};
} // namespace ui
#endif // UI_ACCESSIBILITY_PLATFORM_INSPECT_AX_TARGET_WIN_H_
|