gaia_screen_handler.h revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_GAIA_SCREEN_HANDLER_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_GAIA_SCREEN_HANDLER_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/basictypes.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/command_line.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/memory/ref_counted.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "net/base/net_errors.h"
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace chromeos {
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class SigninScreenHandler;
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A class that's used to specify the way how Gaia should be loaded.
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct GaiaContext {
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GaiaContext();
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Forces Gaia to reload.
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool force_reload;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Whether local verison of Gaia is used.
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool is_local;
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // True if password was changed for the current user.
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool password_changed;
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // True if user pods can be displyed.
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool show_users;
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Whether Gaia should be loaded in offline mode.
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool use_offline;
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // True if user list is non-empty.
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  bool has_users;
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Email of current user.
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string email;
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Whether consumer management enrollment is in progress.
445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool is_enrolling_consumer_management;
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A class that handles WebUI hooks in Gaia screen.
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class GaiaScreenHandler : public BaseScreenHandler {
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  enum FrameState {
51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FRAME_STATE_UNKNOWN = 0,
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FRAME_STATE_LOADING,
53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FRAME_STATE_LOADED,
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FRAME_STATE_ERROR
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  };
56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  explicit GaiaScreenHandler(
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const scoped_refptr<NetworkStateInformer>& network_state_informer);
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~GaiaScreenHandler();
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void LoadGaia(const GaiaContext& context);
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void UpdateGaia(const GaiaContext& context);
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Sends request to reload Gaia. If |force_reload| is true, request
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // will be sent in any case, otherwise it will be sent only when Gaia is
665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // not loading right now.
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void ReloadGaia(bool force_reload);
68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FrameState frame_state() const { return frame_state_; }
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  net::Error frame_error() const { return frame_error_; }
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // TODO (ygorshenin@): remove this dependency.
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  friend class SigninScreenHandler;
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // BaseScreenHandler implementation:
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void DeclareLocalizedValues(LocalizedValuesBuilder* builder) OVERRIDE;
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void Initialize() OVERRIDE;
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // WebUIMessageHandler implementation:
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void RegisterMessages() OVERRIDE;
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // WebUI message handlers.
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void HandleFrameLoadingCompleted(int status);
8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void HandleCompleteAuthentication(const std::string& email,
8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                    const std::string& password,
8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                    const std::string& auth_code);
8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void HandleCompleteLogin(const std::string& typed_email,
8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                           const std::string& password,
9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                           bool using_saml);
9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void HandleUsingSAMLAPI();
9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void HandleScrapedPasswordCount(int password_count);
9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void HandleScrapedPasswordVerificationFailed();
9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void HandleGaiaUIReady();
9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Fill GAIA user name.
9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void PopulateEmail(const std::string& user_id);
10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Mark user as having password changed:
10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void PasswordChangedFor(const std::string& user_id);
10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Kick off cookie / local storage cleanup.
10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void StartClearingCookies(const base::Closure& on_clear_callback);
10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void OnCookiesCleared(const base::Closure& on_clear_callback);
10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Kick off DNS cache flushing.
10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void StartClearingDnsCache();
11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void OnDnsCleared();
11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Show sign-in screen for the given credentials.
11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void ShowSigninScreenForCreds(const std::string& username,
11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                        const std::string& password);
11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Attempts login for test.
11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void SubmitLoginFormForTest();
11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
11846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Updates the member variable and UMA histogram indicating whether the
11946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // principals API was used during SAML login.
12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void SetSAMLPrincipalsAPIUsed(bool api_used);
12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  void ShowGaia(bool is_enrolling_consumer_management);
12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Shows signin screen after dns cache and cookie cleanup operations finish.
12546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void ShowGaiaScreenIfReady();
12646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
12746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Decides whether an auth extension should be pre-loaded. If it should,
12846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // pre-loads it.
12946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void MaybePreloadAuthExtension();
13046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
13146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Tells webui to load authentication extension. |force| is used to force the
13246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // extension reloading, if it has already been loaded. |silent_load| is true
13346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // for cases when extension should be loaded in the background and it
13446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // shouldn't grab the focus. |offline| is true when offline version of the
13546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // extension should be used.
13646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void LoadAuthExtension(bool force, bool silent_load, bool offline);
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // TODO (ygorshenin@): GaiaScreenHandler should implement
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // NetworkStateInformer::Observer.
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void UpdateState(ErrorScreenActor::ErrorReason reason);
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // TODO (ygorshenin@): remove this dependency.
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void SetSigninScreenHandler(SigninScreenHandler* handler);
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  SigninScreenHandlerDelegate* Delegate();
14646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Current state of Gaia frame.
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  FrameState frame_state_;
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Latest Gaia frame error.
151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  net::Error frame_error_;
152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Network state informer used to keep signin screen up.
154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  scoped_refptr<NetworkStateInformer> network_state_informer_;
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
15646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Email to pre-populate with.
15746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  std::string populated_email_;
15846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
15946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Emails of the users, whose passwords have recently been changed.
16046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  std::set<std::string> password_changed_for_;
16146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
16246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // True if dns cache cleanup is done.
16346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool dns_cleared_;
16446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
16546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // True if DNS cache task is already running.
16646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool dns_clear_task_running_;
16746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
16846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // True if cookie jar cleanup is done.
16946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool cookies_cleared_;
17046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
17146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Is focus still stolen from Gaia page?
17246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool focus_stolen_;
17346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
17446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Has Gaia page silent load been started for the current sign-in attempt?
17546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool gaia_silent_load_;
17646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
17746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // The active network at the moment when Gaia page was preloaded.
17846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  std::string gaia_silent_load_network_;
17946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
18046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // If the user authenticated via SAML, this indicates whether the principals
18146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // API was used.
18246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool using_saml_api_;
18346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Whether consumer management enrollment is in progress.
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool is_enrolling_consumer_management_;
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
18746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Test credentials.
18846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  std::string test_user_;
18946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  std::string test_pass_;
19046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool test_expects_complete_login_;
19146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Non-owning ptr to SigninScreenHandler instance. Should not be used
193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // in dtor.
194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // TODO (ygorshenin@): GaiaScreenHandler shouldn't communicate with
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // signin_screen_handler directly.
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  SigninScreenHandler* signin_screen_handler_;
197f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
19846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  base::WeakPtrFactory<GaiaScreenHandler> weak_factory_;
19946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(GaiaScreenHandler);
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
202f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace chromeos
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_GAIA_SCREEN_HANDLER_H_
206