Home | History | Annotate | Download | only in screens
      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