blob: ddc39001e47f931ea8a5ff6f7d3c708752ea9685 [file] [log] [blame]
// Copyright (c) 2012 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.
#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_SCREEN_FLOW_H_
#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_SCREEN_FLOW_H_
#include <string>
#include "base/basictypes.h"
namespace chromeos {
class ScreenContext;
class ScreenManager;
// Class that holds the logic of interpreting screen outcomes and moving between
// the screens.
class ScreenFlow {
public:
ScreenFlow();
virtual ~ScreenFlow();
// Called once the flow is set as a flow for specific screen manager.
// Should usually result in get_manager()->ShowScreen call.
virtual void Start() = 0;
// Called when screen with |screen_id| finishes with |outcome|.
// Additional result parameters may be passed via |context| (always not NULL).
// Should result in get_manager()->ShowScreen call or in
// get_manager()->SetScreenFlow call.
virtual void OnScreenFinished(const std::string& screen_id,
const std::string& outcome,
ScreenContext* context) = 0;
protected:
ScreenManager* screen_manager() { return manager_; }
private:
friend class ScreenManager;
void set_screen_manager(ScreenManager* manager) {
manager_ = manager;
}
// Screen manager associated with this flow. Set by screen manager itself.
ScreenManager* manager_;
DISALLOW_COPY_AND_ASSIGN(ScreenFlow);
};
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_SCREEN_FLOW_H_