1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_CHROMEOS_FIRST_RUN_FIRST_RUN_CONTROLLER_H_
6#define CHROME_BROWSER_CHROMEOS_FIRST_RUN_FIRST_RUN_CONTROLLER_H_
7
8#include <string>
9#include <vector>
10
11#include "ash/first_run/first_run_helper.h"
12#include "base/basictypes.h"
13#include "base/callback.h"
14#include "base/compiler_specific.h"
15#include "base/memory/linked_ptr.h"
16#include "base/memory/scoped_ptr.h"
17#include "base/time/time.h"
18#include "chrome/browser/ui/webui/chromeos/first_run/first_run_actor.h"
19
20class Profile;
21
22namespace content {
23class WebContents;
24}
25
26namespace chromeos {
27
28class FirstRunUIBrowserTest;
29
30namespace first_run {
31class Step;
32}
33
34// FirstRunController creates and manages first-run tutorial.
35// Object manages its lifetime and deletes itself after completion of the
36// tutorial.
37class FirstRunController : public FirstRunActor::Delegate,
38                           public ash::FirstRunHelper::Observer {
39  typedef std::vector<linked_ptr<first_run::Step> > Steps;
40
41 public:
42  virtual ~FirstRunController();
43
44  // Creates first-run UI and starts tutorial.
45  static void Start();
46
47  // Finalizes first-run tutorial and destroys UI.
48  static void Stop();
49
50 private:
51  friend class FirstRunUIBrowserTest;
52
53  FirstRunController();
54  void Init();
55  void Finalize();
56
57  static FirstRunController* GetInstanceForTest();
58
59  // Overriden from FirstRunActor::Delegate.
60  virtual void OnActorInitialized() OVERRIDE;
61  virtual void OnNextButtonClicked(const std::string& step_name) OVERRIDE;
62  virtual void OnHelpButtonClicked() OVERRIDE;
63  virtual void OnStepShown(const std::string& step_name) OVERRIDE;
64  virtual void OnStepHidden(const std::string& step_name) OVERRIDE;
65  virtual void OnActorFinalized() OVERRIDE;
66  virtual void OnActorDestroyed() OVERRIDE;
67
68  // Overriden from ash::FirstRunHelper::Observer.
69  virtual void OnCancelled() OVERRIDE;
70
71  void RegisterSteps();
72  void ShowNextStep();
73  void AdvanceStep();
74  first_run::Step* GetCurrentStep() const;
75
76  // The object providing interface to UI layer. It's not directly owned by
77  // FirstRunController.
78  FirstRunActor* actor_;
79
80  // Helper for manipulating and retreiving information from Shell.
81  scoped_ptr<ash::FirstRunHelper> shell_helper_;
82
83  // List of all tutorial steps.
84  Steps steps_;
85
86  // Index of step that is currently shown.
87  size_t current_step_index_;
88
89  // Profile used for webui and help app.
90  Profile* user_profile_;
91
92  // The work that should be made after actor has been finalized.
93  base::Closure on_actor_finalized_;
94
95  // Web contents of WebUI.
96  content::WebContents* web_contents_for_tests_;
97
98  // Time when tutorial was started.
99  base::Time start_time_;
100
101  DISALLOW_COPY_AND_ASSIGN(FirstRunController);
102};
103
104}  // namespace chromeos
105
106#endif  // CHROME_BROWSER_CHROMEOS_FIRST_RUN_FIRST_RUN_CONTROLLER_H_
107
108