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
|
// 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 "chrome/browser/ui/views/webauthn/passkey_detail_view.h"
#include <cstddef>
#include <memory>
#include <string>
#include "base/strings/utf_string_conversions.h"
#include "chrome/grit/generated_resources.h"
#include "components/vector_icons/vector_icons.h"
#include "device/fido/public_key_credential_user_entity.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/metadata/metadata_impl_macros.h"
#include "ui/base/models/image_model.h"
#include "ui/color/color_id.h"
#include "ui/color/color_provider.h"
#include "ui/gfx/text_constants.h"
#include "ui/views/border.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/flex_layout.h"
#include "ui/views/style/typography.h"
#include "ui/views/view_class_properties.h"
namespace {
std::u16string GetUserNameForDisplay(
const device::PublicKeyCredentialUserEntity& user) {
if (!user.name || user.name->empty()) {
return l10n_util::GetStringUTF16(IDS_WEBAUTHN_UNKNOWN_ACCOUNT);
}
return base::UTF8ToUTF16(*user.name);
}
} // namespace
PasskeyDetailView::PasskeyDetailView(
const device::PublicKeyCredentialUserEntity& user) {
constexpr size_t kHeight = 40, kMargin = 16;
auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>());
layout->set_main_axis_alignment(views::BoxLayout::MainAxisAlignment::kStart);
layout->set_cross_axis_alignment(
views::BoxLayout::CrossAxisAlignment::kCenter);
layout->set_minimum_cross_axis_size(kHeight);
layout->set_between_child_spacing(kMargin);
AddChildView(std::make_unique<views::ImageView>(
ui::ImageModel::FromVectorIcon(vector_icons::kPasskeyIcon, ui::kColorIcon,
/*icon_size=*/24)));
auto* label = AddChildView(std::make_unique<views::Label>(
GetUserNameForDisplay(user), views::style::CONTEXT_DIALOG_BODY_TEXT));
// Make the username label elide with appropriate behavior. Since this is
// website-controlled data inside browser UI, limit the width to something
// reasonable.
label->SetMaximumWidthSingleLine(300);
label->SetElideBehavior(gfx::ELIDE_EMAIL);
label->SetHorizontalAlignment(gfx::HorizontalAlignment::ALIGN_LEFT);
layout->SetFlexForView(label, 1);
}
void PasskeyDetailView::OnThemeChanged() {
View::OnThemeChanged();
SetBorder(views::CreateSolidSidedBorder(
gfx::Insets::TLBR(1, 0, 1, 0),
GetColorProvider()->GetColor(ui::kColorSeparator)));
}
BEGIN_METADATA(PasskeyDetailView)
END_METADATA
|