• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_UI_WEBUI_CHROMEOS_LOGIN_GAIA_SCREEN_HANDLER_H_
6 #define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_GAIA_SCREEN_HANDLER_H_
7 
8 #include "base/basictypes.h"
9 #include "base/command_line.h"
10 #include "base/memory/ref_counted.h"
11 #include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h"
12 #include "net/base/net_errors.h"
13 
14 namespace chromeos {
15 
16 class SigninScreenHandler;
17 
18 // A class that's used to specify the way how Gaia should be loaded.
19 struct GaiaContext {
20   GaiaContext();
21 
22   // Forces Gaia to reload.
23   bool force_reload;
24 
25   // Whether local verison of Gaia is used.
26   bool is_local;
27 
28   // True if password was changed for the current user.
29   bool password_changed;
30 
31   // True if user pods can be displyed.
32   bool show_users;
33 
34   // Whether Gaia should be loaded in offline mode.
35   bool use_offline;
36 
37   // True if user list is non-empty.
38   bool has_users;
39 
40   // Email of current user.
41   std::string email;
42 };
43 
44 // A class that handles WebUI hooks in Gaia screen.
45 class GaiaScreenHandler : public BaseScreenHandler {
46  public:
47   enum FrameState {
48     FRAME_STATE_UNKNOWN = 0,
49     FRAME_STATE_LOADING,
50     FRAME_STATE_LOADED,
51     FRAME_STATE_ERROR
52   };
53 
54   explicit GaiaScreenHandler(
55       const scoped_refptr<NetworkStateInformer>& network_state_informer);
56   virtual ~GaiaScreenHandler();
57 
58   void LoadGaia(const GaiaContext& context);
59   void UpdateGaia(const GaiaContext& context);
60   void ReloadGaia();
61 
frame_state()62   FrameState frame_state() const { return frame_state_; }
frame_error()63   net::Error frame_error() const { return frame_error_; }
64 
65  private:
66   // TODO (ygorshenin@): remove this dependency.
67   friend class SigninScreenHandler;
68 
69   // BaseScreenHandler implementation:
70   virtual void DeclareLocalizedValues(LocalizedValuesBuilder* builder) OVERRIDE;
71   virtual void Initialize() OVERRIDE;
72 
73   // WebUIMessageHandler implementation:
74   virtual void RegisterMessages() OVERRIDE;
75 
76   // WebUI message handlers.
77   void HandleFrameLoadingCompleted(int status);
78 
79   // TODO (ygorshenin@): GaiaScreenHandler should implement
80   // NetworkStateInformer::Observer.
81   void UpdateState(ErrorScreenActor::ErrorReason reason);
82 
83   // TODO (ygorshenin@): remove this dependency.
84   void SetSigninScreenHandler(SigninScreenHandler* handler);
85 
86   // Current state of Gaia frame.
87   FrameState frame_state_;
88 
89   // Latest Gaia frame error.
90   net::Error frame_error_;
91 
92   // Network state informer used to keep signin screen up.
93   scoped_refptr<NetworkStateInformer> network_state_informer_;
94 
95   // Non-owning ptr to SigninScreenHandler instance. Should not be used
96   // in dtor.
97   // TODO (ygorshenin@): GaiaScreenHandler shouldn't communicate with
98   // signin_screen_handler directly.
99   SigninScreenHandler* signin_screen_handler_;
100 
101   DISALLOW_COPY_AND_ASSIGN(GaiaScreenHandler);
102 };
103 
104 }  // namespace chromeos
105 
106 #endif  // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_GAIA_SCREEN_HANDLER_H_
107