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
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/functional/callback_helpers.h"
#include "base/metrics/user_metrics.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/grit/generated_resources.h"
#include "ui/base/interaction/element_identifier.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/models/dialog_model.h"
namespace chrome {
namespace {
DEFINE_LOCAL_ELEMENT_IDENTIFIER_VALUE(kWindowNameFieldId);
void SetBrowserTitleFromTextfield(Browser* browser,
ui::DialogModel* dialog_model) {
std::string text = base::UTF16ToUTF8(
dialog_model->GetTextfieldByUniqueId(kWindowNameFieldId)->text());
if (text.empty()) {
base::RecordAction(base::UserMetricsAction("WindowNaming_Cleared"));
} else {
base::RecordAction(base::UserMetricsAction("WindowNaming_Set"));
}
browser->SetWindowUserTitle(text);
}
std::unique_ptr<ui::DialogModel> CreateWindowNamePromptDialogModel(
Browser* browser) {
ui::DialogModel::Builder dialog_builder;
return dialog_builder.SetInternalName("WindowNamePrompt")
.SetTitle(l10n_util::GetStringUTF16(IDS_NAME_WINDOW_PROMPT_TITLE))
.AddOkButton(base::BindOnce(&SetBrowserTitleFromTextfield, browser,
dialog_builder.model()))
.AddCancelButton(base::DoNothing())
.AddTextfield(
kWindowNameFieldId,
// Deliberately use no label - the dialog contains only this
// textfield, and its title serves as a label for the textfield.
{}, base::UTF8ToUTF16(browser->user_title()),
// Despite what the above comment says, the textfield still needs an
// accessible name - otherwise a screenreader user with their focus on
// the field will have no context for what the field means.
ui::DialogModelTextfield::Params().SetAccessibleName(
l10n_util::GetStringUTF16(IDS_NAME_WINDOW_PROMPT_FIELD_LABEL)))
.SetInitiallyFocusedField(kWindowNameFieldId)
.Build();
}
} // namespace
void ShowWindowNamePrompt(Browser* browser) {
base::RecordAction(base::UserMetricsAction("WindowNaming_DialogShown"));
ShowBrowserModal(browser, CreateWindowNamePromptDialogModel(browser));
}
std::unique_ptr<ui::DialogModel> CreateWindowNamePromptDialogModelForTesting(
Browser* browser) {
return CreateWindowNamePromptDialogModel(browser);
}
} // namespace chrome
|