blob: 354ef7c664310ae79899cd2b1c9e4f220bb22205 [file] [log] [blame]
Dominic Mazzoni336bc0062018-09-23 16:46:431// Copyright 2018 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#ifndef UI_ACCESSIBILITY_AX_TREE_ID_H_
6#define UI_ACCESSIBILITY_AX_TREE_ID_H_
7
8#include <string>
9
James Cook36cab7c2019-10-29 23:26:4010#include "base/no_destructor.h"
Dominic Mazzonie29985852018-12-05 01:48:2711#include "base/unguessable_token.h"
Mario Sanchez Pradab8139c62020-07-17 10:42:0412#include "ui/accessibility/ax_base_export.h"
James Cook36cab7c2019-10-29 23:26:4013#include "ui/accessibility/ax_enums.mojom-forward.h"
Dominic Mazzoni336bc0062018-09-23 16:46:4314
Dominic Mazzoni3a69d4b2018-09-28 23:44:3015namespace mojo {
16template <typename DataViewType, typename T>
Dominic Mazzonie29985852018-12-05 01:48:2717struct UnionTraits;
Dominic Mazzoni3a69d4b2018-09-28 23:44:3018}
19
20namespace ax {
21namespace mojom {
22class AXTreeIDDataView;
23}
24} // namespace ax
25
Dominic Mazzoni336bc0062018-09-23 16:46:4326namespace ui {
27
Dominic Mazzoni3a69d4b2018-09-28 23:44:3028// A unique ID representing an accessibility tree.
Mario Sanchez Pradab8139c62020-07-17 10:42:0429class AX_BASE_EXPORT AXTreeID {
Dominic Mazzoni3a69d4b2018-09-28 23:44:3030 public:
Dominic Mazzonie29985852018-12-05 01:48:2731 // Create an Unknown AXTreeID.
Dominic Mazzoni3a69d4b2018-09-28 23:44:3032 AXTreeID();
Dominic Mazzonie29985852018-12-05 01:48:2733
34 // Copy constructor.
35 AXTreeID(const AXTreeID& other);
36
37 // Create a new unique AXTreeID.
38 static AXTreeID CreateNewAXTreeID();
39
40 // Unserialize an AXTreeID from a string. This is used so that tree IDs
41 // can be stored compactly as a string attribute in an AXNodeData, and
42 // so that AXTreeIDs can be passed to JavaScript bindings in the
43 // automation API.
Dominic Mazzoni3a69d4b2018-09-28 23:44:3044 static AXTreeID FromString(const std::string& string);
Dominic Mazzonie29985852018-12-05 01:48:2745
Mario Sanchez Prada5d7f1ac2020-07-16 17:18:4046 // Convenience method to unserialize an AXTreeID from an UnguessableToken.
47 static AXTreeID FromToken(const base::UnguessableToken& token);
48
Nektarios Paisios376c84c42019-11-02 09:56:0249 AXTreeID& operator=(const AXTreeID& other);
50
Dominic Mazzonie29985852018-12-05 01:48:2751 std::string ToString() const;
52
53 ax::mojom::AXTreeIDType type() const { return type_; }
54 const base::Optional<base::UnguessableToken>& token() const { return token_; }
Dominic Mazzoni3a69d4b2018-09-28 23:44:3055
56 bool operator==(const AXTreeID& rhs) const;
57 bool operator!=(const AXTreeID& rhs) const;
58 bool operator<(const AXTreeID& rhs) const;
59 bool operator<=(const AXTreeID& rhs) const;
60 bool operator>(const AXTreeID& rhs) const;
61 bool operator>=(const AXTreeID& rhs) const;
62
63 private:
Dominic Mazzonie29985852018-12-05 01:48:2764 explicit AXTreeID(ax::mojom::AXTreeIDType type);
Dominic Mazzoni3a69d4b2018-09-28 23:44:3065 explicit AXTreeID(const std::string& string);
66
Dominic Mazzonie29985852018-12-05 01:48:2767 friend struct mojo::UnionTraits<ax::mojom::AXTreeIDDataView, ui::AXTreeID>;
68 friend class base::NoDestructor<AXTreeID>;
Nektarios Paisios376c84c42019-11-02 09:56:0269 friend void swap(AXTreeID& first, AXTreeID& second);
Dominic Mazzoni3a69d4b2018-09-28 23:44:3070
James Cook36cab7c2019-10-29 23:26:4071 ax::mojom::AXTreeIDType type_;
Nektarios Paisios376c84c42019-11-02 09:56:0272 base::Optional<base::UnguessableToken> token_ = base::nullopt;
Dominic Mazzoni3a69d4b2018-09-28 23:44:3073};
74
Kurt Catti-Schmidtbd9d48b2019-03-07 23:38:2575// For use in std::unordered_map.
Mario Sanchez Pradab8139c62020-07-17 10:42:0476struct AX_BASE_EXPORT AXTreeIDHash {
James Cook36cab7c2019-10-29 23:26:4077 size_t operator()(const ui::AXTreeID& tree_id) const;
Kurt Catti-Schmidtbd9d48b2019-03-07 23:38:2578};
79
Mario Sanchez Pradab8139c62020-07-17 10:42:0480AX_BASE_EXPORT std::ostream& operator<<(std::ostream& stream,
81 const AXTreeID& value);
Dominic Mazzoni336bc0062018-09-23 16:46:4382
83// The value to use when an AXTreeID is unknown.
Mario Sanchez Pradab8139c62020-07-17 10:42:0484AX_BASE_EXPORT extern const AXTreeID& AXTreeIDUnknown();
Dominic Mazzoni336bc0062018-09-23 16:46:4385
Dominic Mazzoni336bc0062018-09-23 16:46:4386} // namespace ui
87
88#endif // UI_ACCESSIBILITY_AX_TREE_ID_H_