123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ui/accessibility/ax_tree_id.h"
- #include <algorithm>
- #include <iostream>
- #include "base/check.h"
- #include "base/json/values_util.h"
- #include "base/notreached.h"
- #include "base/values.h"
- #include "ui/accessibility/ax_enums.mojom.h"
- namespace ui {
- AXTreeID::AXTreeID() : AXTreeID(ax::mojom::AXTreeIDType::kUnknown) {}
- AXTreeID::AXTreeID(const AXTreeID& other) = default;
- AXTreeID::AXTreeID(ax::mojom::AXTreeIDType type) : type_(type) {
- if (type_ == ax::mojom::AXTreeIDType::kToken)
- token_ = base::UnguessableToken::Create();
- }
- AXTreeID::AXTreeID(const std::string& string) {
- if (string.empty()) {
- type_ = ax::mojom::AXTreeIDType::kUnknown;
- } else {
- type_ = ax::mojom::AXTreeIDType::kToken;
- absl::optional<base::UnguessableToken> token =
- base::ValueToUnguessableToken(base::Value(string));
- CHECK(token);
- token_ = *token;
- }
- }
- // static
- AXTreeID AXTreeID::FromString(const std::string& string) {
- return AXTreeID(string);
- }
- // static
- AXTreeID AXTreeID::FromToken(const base::UnguessableToken& token) {
- AXTreeID id;
- id.type_ = ax::mojom::AXTreeIDType::kToken;
- id.token_ = token;
- return id;
- }
- // static
- AXTreeID AXTreeID::CreateNewAXTreeID() {
- return AXTreeID(ax::mojom::AXTreeIDType::kToken);
- }
- AXTreeID& AXTreeID::operator=(const AXTreeID& other) = default;
- std::string AXTreeID::ToString() const {
- switch (type_) {
- case ax::mojom::AXTreeIDType::kUnknown:
- return "";
- case ax::mojom::AXTreeIDType::kToken:
- return base::UnguessableTokenToValue(*token_).GetString();
- }
- }
- void swap(AXTreeID& first, AXTreeID& second) {
- std::swap(first.type_, second.type_);
- std::swap(first.token_, second.token_);
- }
- bool AXTreeID::operator==(const AXTreeID& rhs) const {
- return type_ == rhs.type_ && token_ == rhs.token_;
- }
- bool AXTreeID::operator!=(const AXTreeID& rhs) const {
- return !(*this == rhs);
- }
- bool AXTreeID::operator<(const AXTreeID& rhs) const {
- return std::tie(type_, token_) < std::tie(rhs.type_, rhs.token_);
- }
- bool AXTreeID::operator<=(const AXTreeID& rhs) const {
- return std::tie(type_, token_) <= std::tie(rhs.type_, rhs.token_);
- }
- bool AXTreeID::operator>(const AXTreeID& rhs) const {
- return !(*this <= rhs);
- }
- bool AXTreeID::operator>=(const AXTreeID& rhs) const {
- return !(*this < rhs);
- }
- size_t AXTreeIDHash::operator()(const ui::AXTreeID& tree_id) const {
- DCHECK(tree_id.type() == ax::mojom::AXTreeIDType::kToken);
- return base::UnguessableTokenHash()(tree_id.token().value());
- }
- std::ostream& operator<<(std::ostream& stream, const AXTreeID& value) {
- return stream << value.ToString();
- }
- const AXTreeID& AXTreeIDUnknown() {
- static const AXTreeID ax_tree_id_unknown(ax::mojom::AXTreeIDType::kUnknown);
- return ax_tree_id_unknown;
- }
- } // namespace ui
|