0

SmartCard: Custom text for the "always allow" button

Bug: 1503624
Change-Id: I9281adf0aa18011f21106826be9ff096f2484328
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5116644
Reviewed-by: Andy Paicu <andypaicu@chromium.org>
Commit-Queue: Daniel d'Andrada <dandrader@google.com>
Cr-Commit-Position: refs/heads/main@{#1238690}
This commit is contained in:
Daniel d'Andrada
2023-12-18 20:10:04 +00:00
committed by Chromium LUCI CQ
parent 61b47c76a9
commit b51fb9e2fd
10 changed files with 44 additions and 5 deletions

@ -39,6 +39,11 @@ std::u16string SmartCardPermissionRequest::GetMessageTextFragment() const {
base::ASCIIToUTF16(reader_name_));
}
std::optional<std::u16string> SmartCardPermissionRequest::GetAllowAlwaysText()
const {
return l10n_util::GetStringUTF16(IDS_SMART_CARD_PERMISSION_ALWAYS_ALLOW);
}
void SmartCardPermissionRequest::OnPermissionDecided(
ContentSetting content_setting_result,
bool is_one_time,

@ -31,6 +31,7 @@ class SmartCardPermissionRequest : public permissions::PermissionRequest {
bool IsDuplicateOf(
permissions::PermissionRequest* other_request) const override;
std::u16string GetMessageTextFragment() const override;
std::optional<std::u16string> GetAllowAlwaysText() const override;
void OnPermissionDecided(ContentSetting result,
bool is_one_time,

@ -73,7 +73,8 @@ PermissionPromptBubbleBaseView::PermissionPromptBubbleBaseView(
PermissionPromptBubbleBaseView::~PermissionPromptBubbleBaseView() = default;
void PermissionPromptBubbleBaseView::CreatePermissionButtons() {
void PermissionPromptBubbleBaseView::CreatePermissionButtons(
const std::u16string& allow_always_text) {
if (is_one_time_permission_) {
SetButtons(ui::DIALOG_BUTTON_NONE);
@ -95,7 +96,7 @@ void PermissionPromptBubbleBaseView::CreatePermissionButtons() {
FilterUnintenedEventsAndRunCallbacks,
base::Unretained(this),
GetViewId(PermissionDialogButton::kAccept)),
l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_EVERY_VISIT));
allow_always_text);
allow_always_button->SetProperty(views::kElementIdentifierKey,
kAllowButtonElementId);
allow_always_button->SetID(GetViewId(PermissionDialogButton::kAccept));
@ -299,6 +300,21 @@ bool PermissionPromptBubbleBaseView::IsOneTimePermission(
return true;
}
std::u16string PermissionPromptBubbleBaseView::GetAllowAlwaysText(
const std::vector<permissions::PermissionRequest*>& visible_requests) {
CHECK_GT(visible_requests.size(), 0u);
if (visible_requests.size() == 1 &&
visible_requests[0]->GetAllowAlwaysText().has_value()) {
// A prompt for a single request can use an "allow always" text that is
// customized for it.
return visible_requests[0]->GetAllowAlwaysText().value();
}
// Use the generic text.
return l10n_util::GetStringUTF16(IDS_PERMISSION_ALLOW_EVERY_VISIT);
}
void PermissionPromptBubbleBaseView::RecordDecision(
permissions::PermissionAction action) {
const std::string uma_suffix =

@ -82,7 +82,7 @@ class PermissionPromptBubbleBaseView : public PermissionPromptBaseView {
std::u16string GetPermissionFragmentForTesting() const;
protected:
void CreatePermissionButtons();
void CreatePermissionButtons(const std::u16string& allow_always_text);
void CreateExtraTextLabel(const std::u16string& extra_text);
void CreateWidget();
@ -97,6 +97,9 @@ class PermissionPromptBubbleBaseView : public PermissionPromptBaseView {
static bool IsOneTimePermission(
permissions::PermissionPrompt::Delegate& delegate);
static std::u16string GetAllowAlwaysText(
const std::vector<permissions::PermissionRequest*>& visible_requests);
private:
void SetPromptStyle(PermissionPromptStyle prompt_style);

@ -172,7 +172,7 @@ PermissionPromptBubbleOneOriginView::PermissionPromptBubbleOneOriginView(
CreateExtraTextLabel(extra_text.value());
}
CreatePermissionButtons();
CreatePermissionButtons(GetAllowAlwaysText(visible_requests));
bool has_camera_request = false;
bool has_mic_request = false;

@ -67,7 +67,7 @@ PermissionPromptBubbleTwoOriginsView::PermissionPromptBubbleTwoOriginsView(
CreateExtraTextLabel(extra_text.value());
}
CreatePermissionButtons();
CreatePermissionButtons(GetAllowAlwaysText(delegate->Requests()));
// Only requests for Storage Access should use this prompt.
CHECK(delegate);

@ -282,6 +282,10 @@ std::u16string PermissionRequest::GetMessageTextFragment() const {
}
#endif
std::optional<std::u16string> PermissionRequest::GetAllowAlwaysText() const {
return std::nullopt;
}
bool PermissionRequest::ShouldUseTwoOriginPrompt() const {
return request_type() == RequestType::kStorageAccess &&
base::FeatureList::IsEnabled(

@ -116,6 +116,12 @@ class PermissionRequest {
virtual std::u16string GetMessageTextFragment() const;
#endif
// Returns the text to be used in the "allow always" button of the
// permission prompt.
// If not provided, the generic text for this button will be used instead.
// The default implementation returns std::nullopt (ie, use generic text).
virtual std::optional<std::u16string> GetAllowAlwaysText() const;
// Whether the request was initiated by the user clicking on the permission
// element.
bool IsEmbeddedPermissionElementInitiated() const;

@ -345,6 +345,9 @@ This will otherwise be blocked by your privacy settings. This will allow the con
<message name="IDS_SMART_CARD_PERMISSION_PROMPT" desc="Text on dialog that asks the user for permission to access a smart card reader device and the card inserted in it (or presented to it, if contactless).">
Control <ph name="ReaderName">$1<ex>HID Omnikey</ex></ph> and gain access to the smart card accessible to it?
</message>
<message name="IDS_SMART_CARD_PERMISSION_ALWAYS_ALLOW" desc="Label on button to always allow access to this smart card reader and any card inserted in (or presented to) it.">
Always allow, with any card
</message>
</if>
<!-- Quota messages -->

@ -0,0 +1 @@
3e0e67dcb269c255fe09bd916423511c60eb9d10