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(
transport_availability_ = std::move(transport_availability);
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));
}
......@@ -200,8 +200,12 @@ void AuthenticatorRequestDialogModel::Cancel() {
void AuthenticatorRequestDialogModel::Back() {
if (current_step() == Step::kWelcomeScreen) {
Cancel();
} else {
} else if (current_step() == Step::kTransportSelection) {
SetCurrentStep(Step::kWelcomeScreen);
} else {
SetCurrentStep(transport_availability_.available_transports.size() >= 2u
? Step::kTransportSelection
: Step::kWelcomeScreen);
}
}
......
......@@ -11,6 +11,17 @@
#include "testing/gmock/include/gmock/gmock.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 {
public:
AuthenticatorRequestDialogModelTest() {}
......@@ -24,14 +35,6 @@ TEST_F(AuthenticatorRequestDialogModelTest, TransportAutoSelection) {
using FidoTransportProtocol = ::device::FidoTransportProtocol;
using Step = AuthenticatorRequestDialogModel::Step;
const base::flat_set<FidoTransportProtocol> kAllTransports = {
FidoTransportProtocol::kUsbHumanInterfaceDevice,
FidoTransportProtocol::kNearFieldCommunication,
FidoTransportProtocol::kBluetoothLowEnergy,
FidoTransportProtocol::kInternal,
FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy,
};
const struct {
base::flat_set<FidoTransportProtocol> available_transports;
base::Optional<FidoTransportProtocol> last_used_transport;
......@@ -110,22 +113,23 @@ TEST_F(AuthenticatorRequestDialogModelTest, TransportAutoSelection) {
ASSERT_EQ(Step::kWelcomeScreen, model.current_step());
model.StartGuidedFlowForMostLikelyTransportOrShowTransportSelection();
}
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) {
using FidoTransportProtocol = ::device::FidoTransportProtocol;
::device::FidoRequestHandlerBase::TransportAvailabilityInfo transports_info_1;
transports_info_1.available_transports = {
FidoTransportProtocol::kUsbHumanInterfaceDevice,
FidoTransportProtocol::kNearFieldCommunication,
FidoTransportProtocol::kBluetoothLowEnergy,
FidoTransportProtocol::kInternal,
FidoTransportProtocol::kCloudAssistedBluetoothLowEnergy,
};
transports_info_1.available_transports = kAllTransports;
AuthenticatorRequestDialogModel model;
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