1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_FIRST_RUN_STEP_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_FIRST_RUN_STEP_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <string>
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/basictypes.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/time/time.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace ash {
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class FirstRunHelper;
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace gfx {
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class Size;
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace chromeos {
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class FirstRunActor;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace first_run {
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class Step {
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  Step(const std::string& name,
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)       ash::FirstRunHelper* shell_helper,
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)       FirstRunActor* actor);
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~Step();
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Step shows its content.
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void Show();
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Called before hiding step.
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnBeforeHide();
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Called after step has been hidden.
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnAfterHide();
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const std::string& name() const { return name_; }
44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected:
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ash::FirstRunHelper* shell_helper() const { return shell_helper_; }
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FirstRunActor* actor() const { return actor_; }
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  gfx::Size GetOverlaySize() const;
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Called from Show method.
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DoShow() = 0;
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Called from OnBeforeHide. Step implementation could override this method to
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // react on corresponding event.
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DoOnBeforeHide() {}
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Called from OnAfterHide. Step implementation could override this method to
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // react on event.
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void DoOnAfterHide() {}
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Records time spent on step to UMA.
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void RecordCompletion();
645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string name_;
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ash::FirstRunHelper* shell_helper_;
67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FirstRunActor* actor_;
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::Time show_time_;
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(Step);
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace first_run
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace chromeos
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_FIRST_RUN_STEP_H_
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
78