Commit 8fc032a3 authored by Balazs Engedy's avatar Balazs Engedy Committed by Commit Bot

WebAuthn UX: `Back` button should go to transport selection with >=2 transports.

Bug: 875903
Change-Id: I82c0e154101e7fee7c74262eadfc1ce974ae0a67
Reviewed-on: https://chromium-review.googlesource.com/1181566Reviewed-by: default avatarJun Choi <hongjunchoi@chromium.org>
Commit-Queue: Balazs Engedy <engedy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#584552}
parent 4f0ac570
...@@ -96,7 +96,7 @@ void AuthenticatorRequestDialogModel::StartFlow( ...@@ -96,7 +96,7 @@ void AuthenticatorRequestDialogModel::StartFlow(
transport_availability_ = std::move(transport_availability); transport_availability_ = std::move(transport_availability);
last_used_transport_ = last_used_transport; last_used_transport_ = last_used_transport;
for (const auto transport : transport_availability.available_transports) { for (const auto transport : transport_availability_.available_transports) {
transport_list_model_.AppendTransport(ToAuthenticatorTransport(transport)); transport_list_model_.AppendTransport(ToAuthenticatorTransport(transport));
} }
...@@ -200,8 +200,12 @@ void AuthenticatorRequestDialogModel::Cancel() { ...@@ -200,8 +200,12 @@ void AuthenticatorRequestDialogModel::Cancel() {
void AuthenticatorRequestDialogModel::Back() { void AuthenticatorRequestDialogModel::Back() {
if (current_step() == Step::kWelcomeScreen) { if (current_step() == Step::kWelcomeScreen) {
Cancel(); Cancel();
} else { } else if (current_step() == Step::kTransportSelection) {
SetCurrentStep(Step::kWelcomeScreen); SetCurrentStep(Step::kWelcomeScreen);
} else {
SetCurrentStep(transport_availability_.available_transports.size() >= 2u
? Step::kTransportSelection
: Step::kWelcomeScreen);
} }
} }
......
...@@ -11,6 +11,17 @@ ...@@ -11,6 +11,17 @@
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
namespace {
const base::flat_set<device::FidoTransportProtocol> kAllTransports = {
device::FidoTransportProtocol::kUsbHumanInterfaceDevice,
device::FidoTransportProtocol::kNearFieldCommunication,
device::FidoTransportProtocol::kBluetoothLowEnergy,
device::FidoTransportProtocol::kInternal,
device::FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy,
};
}
class AuthenticatorRequestDialogModelTest : public ::testing::Test { class AuthenticatorRequestDialogModelTest : public ::testing::Test {
public: public:
AuthenticatorRequestDialogModelTest() {} AuthenticatorRequestDialogModelTest() {}
...@@ -24,14 +35,6 @@ TEST_F(AuthenticatorRequestDialogModelTest, TransportAutoSelection) { ...@@ -24,14 +35,6 @@ TEST_F(AuthenticatorRequestDialogModelTest, TransportAutoSelection) {
using FidoTransportProtocol = ::device::FidoTransportProtocol; using FidoTransportProtocol = ::device::FidoTransportProtocol;
using Step = AuthenticatorRequestDialogModel::Step; using Step = AuthenticatorRequestDialogModel::Step;
const base::flat_set<FidoTransportProtocol> kAllTransports = {
FidoTransportProtocol::kUsbHumanInterfaceDevice,
FidoTransportProtocol::kNearFieldCommunication,
FidoTransportProtocol::kBluetoothLowEnergy,
FidoTransportProtocol::kInternal,
FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy,
};
const struct { const struct {
base::flat_set<FidoTransportProtocol> available_transports; base::flat_set<FidoTransportProtocol> available_transports;
base::Optional<FidoTransportProtocol> last_used_transport; base::Optional<FidoTransportProtocol> last_used_transport;
...@@ -110,22 +113,23 @@ TEST_F(AuthenticatorRequestDialogModelTest, TransportAutoSelection) { ...@@ -110,22 +113,23 @@ TEST_F(AuthenticatorRequestDialogModelTest, TransportAutoSelection) {
ASSERT_EQ(Step::kWelcomeScreen, model.current_step()); ASSERT_EQ(Step::kWelcomeScreen, model.current_step());
model.StartGuidedFlowForMostLikelyTransportOrShowTransportSelection(); model.StartGuidedFlowForMostLikelyTransportOrShowTransportSelection();
} }
EXPECT_EQ(test_case.expected_first_step, model.current_step()); EXPECT_EQ(test_case.expected_first_step, model.current_step());
if (model.current_step() == Step::kTransportSelection)
continue;
model.Back();
if (test_case.available_transports.size() >= 2u) {
EXPECT_EQ(Step::kTransportSelection, model.current_step());
} else {
EXPECT_EQ(Step::kWelcomeScreen, model.current_step());
}
} }
} }
TEST_F(AuthenticatorRequestDialogModelTest, TransportList) { TEST_F(AuthenticatorRequestDialogModelTest, TransportList) {
using FidoTransportProtocol = ::device::FidoTransportProtocol;
::device::FidoRequestHandlerBase::TransportAvailabilityInfo transports_info_1; ::device::FidoRequestHandlerBase::TransportAvailabilityInfo transports_info_1;
transports_info_1.available_transports = { transports_info_1.available_transports = kAllTransports;
FidoTransportProtocol::kUsbHumanInterfaceDevice,
FidoTransportProtocol::kNearFieldCommunication,
FidoTransportProtocol::kBluetoothLowEnergy,
FidoTransportProtocol::kInternal,
FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy,
};
AuthenticatorRequestDialogModel model; AuthenticatorRequestDialogModel model;
model.StartFlow(std::move(transports_info_1), base::nullopt); model.StartFlow(std::move(transports_info_1), base::nullopt);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment