• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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_LOGIN_SCREENS_BASE_SCREEN_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_BASE_SCREEN_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "chrome/browser/chromeos/login/screens/screen_context.h"
12 
13 namespace base {
14 class DictionaryValue;
15 }
16 
17 namespace chromeos {
18 
19 // Base class for the all OOBE/login/before-session screens.
20 // Screens are identified by ID, screen and it's JS counterpart must have same
21 // id.
22 // Most of the screens will be re-created for each appearance with Initialize()
23 // method called just once. However if initialization is too expensive, screen
24 // can override result of IsPermanent() method, and do clean-up upon subsequent
25 // Initialize() method calls.
26 class BaseScreen {
27  public:
28   BaseScreen();
29   virtual ~BaseScreen();
30 
31   // ---- Old implementation ----
32 
33   virtual void PrepareToShow() = 0;
34 
35   // Makes wizard screen visible.
36   virtual void Show() = 0;
37 
38   // Makes wizard screen invisible.
39   virtual void Hide() = 0;
40 
41   // Returns the screen name.
42   virtual std::string GetName() const = 0;
43 
44   // ---- New Implementation ----
45 
46   // Called to perform initialization of the screen. UI is guaranteed to exist
47   // at this point. Screen can alter context, resulting context will be passed
48   // to JS. This method will be called once per instance of the Screen object,
49   // unless |IsPermanent()| returns |true|.
50   virtual void Initialize(ScreenContext* context);
51 
52   // Called when screen appears.
53   virtual void OnShow();
54   // Called when screen disappears, either because it finished it's work, or
55   // because some other screen pops up.
56   virtual void OnHide();
57 
58   // Called when we navigate from screen so that we will never return to it.
59   // This is a last chance to call JS counterpart, this object will be deleted
60   // soon.
61   virtual void OnClose();
62 
63   // Indicates whether status area should be displayed while this screen is
64   // displayed.
65   virtual bool IsStatusAreaDisplayed();
66 
67   // If this method returns |true|, screen will not be deleted once we leave it.
68   // However, Initialize() might be called several times in this case.
69   virtual bool IsPermanent();
70 
71   // Returns the identifier of the screen.
72   virtual std::string GetID() const;
73 
74  protected:
75   // Screen can call this method to notify framework that it have finished
76   // it's work with |outcome|.
77   void Finish(const std::string& outcome);
78 
79   // Called when button with |button_id| was pressed. Notification
80   // about this event comes from the JS counterpart.
81   virtual void OnButtonPressed(const std::string& button_id);
82 
83   // Called when context for the currenct screen was
84   // changed. Notification about this event comes from the JS
85   // counterpart.
86   virtual void OnContextChanged(const base::DictionaryValue* diff);
87 
88  private:
89   friend class ScreenManager;
90   void SetContext(ScreenContext* context);
91 
92   DISALLOW_COPY_AND_ASSIGN(BaseScreen);
93 };
94 
95 }  // namespace chromeos
96 
97 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_BASE_SCREEN_H_
98