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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/webauthn/account_hover_list_model.h"
#include <cstddef>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/webauthn/authenticator_request_dialog_model.h"
#include "chrome/grit/generated_resources.h"
#include "components/vector_icons/vector_icons.h"
#include "device/fido/discoverable_credential_metadata.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/image_model.h"
#include "ui/color/color_id.h"
constexpr size_t kIconSize = 20;
namespace {
std::u16string NameTokenForDisplay(std::string_view name_token) {
if (name_token.empty()) {
return l10n_util::GetStringUTF16(IDS_WEBAUTHN_UNKNOWN_ACCOUNT);
}
return base::UTF8ToUTF16(name_token);
}
} // namespace
AccountHoverListModel::AccountHoverListModel(
AuthenticatorRequestDialogModel* dialog_model,
Delegate* delegate)
: delegate_(delegate) {
for (const device::DiscoverableCredentialMetadata& cred :
dialog_model->creds) {
items_.emplace_back(
NameTokenForDisplay(cred.user.name.value_or("")),
AuthenticatorRequestDialogModel::GetMechanismDescription(cred),
ui::ImageModel::FromVectorIcon(vector_icons::kPasskeyIcon,
dialog_model->ui_disabled_
? ui::kColorIconDisabled
: ui::kColorIcon,
kIconSize),
!dialog_model->ui_disabled_);
}
}
AccountHoverListModel::~AccountHoverListModel() = default;
std::vector<int> AccountHoverListModel::GetButtonTags() const {
std::vector<int> tag_list(items_.size());
for (size_t i = 0; i < items_.size(); ++i) {
tag_list[i] = i;
}
return tag_list;
}
std::u16string AccountHoverListModel::GetItemText(int item_tag) const {
return items_.at(item_tag).text;
}
std::u16string AccountHoverListModel::GetDescriptionText(int item_tag) const {
return items_.at(item_tag).description;
}
ui::ImageModel AccountHoverListModel::GetItemIcon(int item_tag) const {
return items_.at(item_tag).icon;
}
bool AccountHoverListModel::IsButtonEnabled(int item_tag) const {
return items_.at(item_tag).enabled;
}
void AccountHoverListModel::OnListItemSelected(int item_tag) {
delegate_->CredentialSelected(item_tag);
}
size_t AccountHoverListModel::GetPreferredItemCount() const {
return items_.size();
}
AccountHoverListModel::Item::Item(std::u16string text,
std::u16string description,
ui::ImageModel icon,
bool enabled)
: text(std::move(text)),
description(std::move(description)),
icon(icon),
enabled(enabled) {}
AccountHoverListModel::Item::Item(Item&&) = default;
AccountHoverListModel::Item& AccountHoverListModel::Item::operator=(Item&&) =
default;
AccountHoverListModel::Item::~Item() = default;
|