base_screen.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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
13namespace base {
14class DictionaryValue;
15}
16
17namespace 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.
26class 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