blob: 48c9fa91b4d1abadefeb8c98a5e62a6129295a13 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// 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/webauthn/sheet_view_factory.h"
#include "base/logging.h"
#include "chrome/browser/ui/views/webauthn/authenticator_request_sheet_view.h"
#include "chrome/browser/ui/views/webauthn/authenticator_transport_selector_sheet_view.h"
#include "chrome/browser/ui/webauthn/sheet_models.h"
#include "chrome/browser/webauthn/authenticator_request_dialog_model.h"
namespace {
// A placeholder sheet to show in place of unimplemented sheets.
class PlaceholderSheetModel : public AuthenticatorSheetModelBase {
public:
using AuthenticatorSheetModelBase::AuthenticatorSheetModelBase;
private:
// AuthenticatorSheetModelBase:
gfx::ImageSkia* GetStepIllustration() const override { return nullptr; }
base::string16 GetStepTitle() const override { return base::string16(); }
base::string16 GetStepDescription() const override {
return base::string16();
}
};
} // namespace
std::unique_ptr<AuthenticatorRequestSheetView> CreateSheetViewForCurrentStepOf(
AuthenticatorRequestDialogModel* dialog_model) {
using Step = AuthenticatorRequestDialogModel::Step;
std::unique_ptr<AuthenticatorRequestSheetView> sheet_view;
switch (dialog_model->current_step()) {
case Step::kWelcomeScreen:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorWelcomeSheetModel>(dialog_model));
break;
case Step::kTransportSelection:
sheet_view = std::make_unique<AuthenticatorTransportSelectorSheetView>(
std::make_unique<AuthenticatorTransportSelectorSheetModel>(
dialog_model));
break;
case Step::kUsbInsertAndActivate:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorInsertAndActivateUsbSheetModel>(
dialog_model));
break;
case Step::kErrorTimedOut:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorTimeoutErrorModel>(dialog_model));
break;
case Step::kErrorNoAvailableTransports:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorNoAvailableTransportsErrorModel>(
dialog_model));
break;
case Step::kErrorKeyNotRegistered:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorNotRegisteredErrorModel>(dialog_model));
break;
case Step::kErrorKeyAlreadyRegistered:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorAlreadyRegisteredErrorModel>(
dialog_model));
break;
case Step::kErrorInternalUnrecognized:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorInternalUnrecognizedErrorSheetModel>(
dialog_model));
break;
case Step::kBlePowerOnManual:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorBlePowerOnManualSheetModel>(
dialog_model));
break;
case Step::kBlePairingBegin:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorBlePairingBeginSheetModel>(
dialog_model));
break;
case Step::kBleEnterPairingMode:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorBleEnterPairingModeSheetModel>(
dialog_model));
break;
case Step::kBleDeviceSelection:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorBleDeviceSelectionSheetModel>(
dialog_model));
break;
case Step::kBlePinEntry:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorBlePinEntrySheetModel>(dialog_model));
break;
case Step::kBleVerifying:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorBleVerifyingSheetModel>(dialog_model));
break;
case Step::kBleActivate:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorBleActivateSheetModel>(dialog_model));
break;
case Step::kTouchId:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorTouchIdSheetModel>(dialog_model));
break;
case Step::kCableActivate:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<AuthenticatorPaaskSheetModel>(dialog_model));
break;
case Step::kNotStarted:
case Step::kCompleted:
case Step::kBlePowerOnAutomatic:
sheet_view = std::make_unique<AuthenticatorRequestSheetView>(
std::make_unique<PlaceholderSheetModel>(dialog_model));
break;
}
CHECK(sheet_view);
sheet_view->InitChildViews();
return sheet_view;
}