forked from chromium/chromium
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[M112][PaymentRequest] Fix payments view accessibility visibility
(cherry picked from commit a73e70d) This ensures that invisible payments views are ignored in accessibility contexts such as a screen reader. See the bug for more context, in summary we used to rely on screen readers ignoring invisible elements, which is no longer the case. - Behind the PaymentHandlerMinimalHeaderUX feature, the finished progress bar which is used as a separator is set to ignored once it's done loading. The origin label is also set to accessibility focusable. - The processing spinner, present and invisible on most payment sheets, is set to ignored when invisible. - Hidden payment sheets, made invisible within a stack of payment sheet views used for animation, are set to ignored when invisible. Bug: 1418659, 1420720 Change-Id: I54d43bf3de29b84941c6a0a906c41139df0e4cf6 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4294863 Reviewed-by: Peter Kotwicz <pkotwicz@chromium.org> Commit-Queue: Nick Burris <nburris@chromium.org> Cr-Original-Commit-Position: refs/heads/main@{#1112179} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4304359 Cr-Commit-Position: refs/branch-heads/5615@{chromium#188} Cr-Branched-From: 9c6408e-refs/heads/main@{#1109224}
- Loading branch information
1 parent
012a3ba
commit 32a741a
Showing
5 changed files
with
148 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
119 changes: 119 additions & 0 deletions
119
chrome/browser/ui/views/payments/payment_request_sheet_controller_browsertest.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
// Copyright 2023 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/payments/payment_request_browsertest_base.h" | ||
#include "chrome/browser/ui/views/payments/payment_request_dialog_view_ids.h" | ||
#include "components/autofill/core/browser/autofill_test_utils.h" | ||
#include "content/public/test/browser_test.h" | ||
#include "testing/gtest/include/gtest/gtest.h" | ||
#include "ui/views/accessibility/view_accessibility.h" | ||
|
||
namespace payments { | ||
|
||
class PaymentRequestSheetControllerTest : public PaymentRequestBrowserTestBase { | ||
public: | ||
PaymentRequestSheetControllerTest() = default; | ||
~PaymentRequestSheetControllerTest() override = default; | ||
}; | ||
|
||
IN_PROC_BROWSER_TEST_F(PaymentRequestSheetControllerTest, | ||
ProcessingSpinnerViewAccessibility) { | ||
// Installs two apps so that the Payment Request UI will be shown. | ||
std::string a_method_name; | ||
InstallPaymentApp("a.com", "/payment_request_success_responder.js", | ||
&a_method_name); | ||
std::string b_method_name; | ||
InstallPaymentApp("b.com", "/payment_request_success_responder.js", | ||
&b_method_name); | ||
|
||
NavigateTo("/payment_request_retry_with_payer_errors.html"); | ||
autofill::AutofillProfile contact = autofill::test::GetFullProfile(); | ||
AddAutofillProfile(contact); | ||
|
||
InvokePaymentRequestUIWithJs( | ||
content::JsReplace("buyWithMethods([{supportedMethods:$1}" | ||
", {supportedMethods:$2}]);", | ||
a_method_name, b_method_name)); | ||
|
||
// Click on pay. | ||
EXPECT_TRUE(IsPayButtonEnabled()); | ||
ResetEventWaiterForSequence({DialogEvent::PROCESSING_SPINNER_SHOWN}); | ||
ClickOnDialogViewAndWait(DialogViewID::PAY_BUTTON, dialog_view()); | ||
|
||
EXPECT_TRUE(dialog_view()->throbber_overlay_for_testing()->GetVisible()); | ||
EXPECT_FALSE(dialog_view() | ||
->throbber_overlay_for_testing() | ||
->GetViewAccessibility() | ||
.IsIgnored()); | ||
EXPECT_FALSE(dialog_view() | ||
->throbber_overlay_for_testing() | ||
->GetViewAccessibility() | ||
.IsLeaf()); | ||
|
||
// Wait for the response to settle. | ||
ASSERT_TRUE( | ||
content::ExecJs(GetActiveWebContents(), "processShowResponse();")); | ||
|
||
// Call retry to finish the dialog loading state and hide the spinner. | ||
ResetEventWaiterForSequence({DialogEvent::PROCESSING_SPINNER_HIDDEN, | ||
DialogEvent::SPEC_DONE_UPDATING, | ||
DialogEvent::PROCESSING_SPINNER_HIDDEN, | ||
DialogEvent::BACK_TO_PAYMENT_SHEET_NAVIGATION, | ||
DialogEvent::CONTACT_INFO_EDITOR_OPENED}); | ||
ASSERT_TRUE(content::ExecuteScript(GetActiveWebContents(), | ||
"retry({" | ||
" payer: {" | ||
" email: 'EMAIL ERROR'," | ||
" name: 'NAME ERROR'," | ||
" phone: 'PHONE ERROR'" | ||
" }" | ||
"});")); | ||
WaitForObservedEvent(); | ||
|
||
EXPECT_FALSE(dialog_view()->throbber_overlay_for_testing()->GetVisible()); | ||
EXPECT_TRUE(dialog_view() | ||
->throbber_overlay_for_testing() | ||
->GetViewAccessibility() | ||
.IsIgnored()); | ||
EXPECT_TRUE(dialog_view() | ||
->throbber_overlay_for_testing() | ||
->GetViewAccessibility() | ||
.IsLeaf()); | ||
} | ||
|
||
IN_PROC_BROWSER_TEST_F(PaymentRequestSheetControllerTest, | ||
HiddenSheetViewAccessibility) { | ||
// Installs two apps so that the Payment Request UI will be shown. | ||
std::string a_method_name; | ||
InstallPaymentApp("a.com", "/payment_request_success_responder.js", | ||
&a_method_name); | ||
std::string b_method_name; | ||
InstallPaymentApp("b.com", "/payment_request_success_responder.js", | ||
&b_method_name); | ||
|
||
NavigateTo("/payment_request_contact_details_test.html"); | ||
InvokePaymentRequestUIWithJs( | ||
content::JsReplace("buyWithMethods([{supportedMethods:$1}" | ||
", {supportedMethods:$2}]);", | ||
a_method_name, b_method_name)); | ||
|
||
// Expect that the payment request view is accessibility visible. | ||
views::View* payment_request_view = | ||
GetByDialogViewID(DialogViewID::PAYMENT_REQUEST_SHEET); | ||
EXPECT_FALSE(payment_request_view->GetViewAccessibility().IsIgnored()); | ||
EXPECT_FALSE(payment_request_view->GetViewAccessibility().IsLeaf()); | ||
|
||
OpenContactInfoEditorScreen(); | ||
|
||
// Expect that the now hidden payment request view is not accessibility | ||
// visible, and that the contact info view is. | ||
EXPECT_TRUE(payment_request_view->GetViewAccessibility().IsIgnored()); | ||
EXPECT_TRUE(payment_request_view->GetViewAccessibility().IsLeaf()); | ||
views::View* contact_info_view = | ||
GetByDialogViewID(DialogViewID::CONTACT_INFO_EDITOR_SHEET); | ||
EXPECT_FALSE(contact_info_view->GetViewAccessibility().IsIgnored()); | ||
EXPECT_FALSE(contact_info_view->GetViewAccessibility().IsLeaf()); | ||
} | ||
|
||
} // namespace payments |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters