Home | History | Annotate | Download | only in first_run
      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 
     20 class Profile;
     21 
     22 namespace content {
     23 class WebContents;
     24 }
     25 
     26 namespace chromeos {
     27 
     28 class FirstRunUIBrowserTest;
     29 
     30 namespace first_run {
     31 class 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.
     37 class 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