1 // Copyright (c) 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.
5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_MANAGED_LOCALLY_MANAGED_USER_CREATION_SCREEN_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_MANAGED_LOCALLY_MANAGED_USER_CREATION_SCREEN_H_
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "chrome/browser/chromeos/camera_presence_notifier.h"
13 #include "chrome/browser/chromeos/login/managed/managed_user_creation_controller.h"
14 #include "chrome/browser/chromeos/login/screens/wizard_screen.h"
15 #include "chrome/browser/chromeos/net/network_portal_detector.h"
16 #include "chrome/browser/image_decoder.h"
17 #include "chrome/browser/supervised_user/supervised_user_sync_service.h"
18 #include "chrome/browser/ui/webui/chromeos/login/locally_managed_user_creation_screen_handler.h"
19 #include "ui/gfx/image/image_skia.h"
27 // Class that controls screen showing ui for locally managed user creation.
28 class LocallyManagedUserCreationScreen
29 : public WizardScreen,
30 public LocallyManagedUserCreationScreenHandler::Delegate,
31 public ManagedUserCreationController::StatusConsumer,
32 public SupervisedUserSyncServiceObserver,
33 public ImageDecoder::Delegate,
34 public NetworkPortalDetector::Observer,
35 public CameraPresenceNotifier::Observer {
37 LocallyManagedUserCreationScreen(
38 ScreenObserver* observer,
39 LocallyManagedUserCreationScreenHandler* actor);
40 virtual ~LocallyManagedUserCreationScreen();
42 // Makes screen to show message about inconsistency in manager login flow
43 // (e.g. password change detected, invalid OAuth token, etc).
44 // Called when manager user is successfully authenticated, so ui elements
45 // should result in forced logout.
46 void ShowManagerInconsistentStateErrorScreen();
48 // Called when authentication fails for manager with provided password.
49 // Displays wrong password message on manager selection screen.
50 void OnManagerLoginFailure();
52 // Called when manager is successfully authenticated and account is in
54 void OnManagerFullyAuthenticated(Profile* manager_profile);
56 // Called when manager is successfully authenticated against cryptohome, but
57 // OAUTH token validation hasn't completed yet.
58 // Results in spinner indicating that creation is in process.
59 void OnManagerCryptohomeAuthenticated();
61 // Shows initial screen where managed user name/password are defined and
62 // manager is selected.
63 void ShowInitialScreen();
65 // CameraPresenceNotifier::Observer implementation:
66 virtual void OnCameraPresenceCheckDone(bool is_camera_present) OVERRIDE;
68 // SupervisedUserSyncServiceObserver implementation
69 virtual void OnSupervisedUserAcknowledged(
70 const std::string& supervised_user_id) OVERRIDE {}
71 virtual void OnSupervisedUsersSyncingStopped() OVERRIDE {}
72 virtual void OnSupervisedUsersChanged() OVERRIDE;
74 // WizardScreen implementation:
75 virtual void PrepareToShow() OVERRIDE;
76 virtual void Show() OVERRIDE;
77 virtual void Hide() OVERRIDE;
78 virtual std::string GetName() const OVERRIDE;
80 // LocallyManagedUserCreationScreenHandler::Delegate implementation:
81 virtual void OnActorDestroyed(LocallyManagedUserCreationScreenHandler* actor)
83 virtual void CreateManagedUser(
84 const base::string16& display_name,
85 const std::string& managed_user_password) OVERRIDE;
86 virtual void ImportManagedUser(const std::string& user_id) OVERRIDE;
87 virtual void ImportManagedUserWithPassword(
88 const std::string& user_id,
89 const std::string& password) OVERRIDE;
90 virtual void AuthenticateManager(
91 const std::string& manager_id,
92 const std::string& manager_password) OVERRIDE;
93 virtual void AbortFlow() OVERRIDE;
94 virtual void FinishFlow() OVERRIDE;
95 virtual bool FindUserByDisplayName(const base::string16& display_name,
96 std::string *out_id) const OVERRIDE;
97 virtual void OnPageSelected(const std::string& page) OVERRIDE;
99 // LocallyManagedUserController::StatusConsumer overrides.
100 virtual void OnCreationError(ManagedUserCreationController::ErrorCode code)
102 virtual void OnCreationTimeout() OVERRIDE;
103 virtual void OnCreationSuccess() OVERRIDE;
104 virtual void OnLongCreationWarning() OVERRIDE;
106 // NetworkPortalDetector::Observer implementation:
107 virtual void OnPortalDetectionCompleted(
108 const NetworkState* network,
109 const NetworkPortalDetector::CaptivePortalState& state) OVERRIDE;
111 // TODO(antrim) : this is an explicit code duplications with UserImageScreen.
112 // It should be removed by issue 251179.
114 // LocallyManagedUserCreationScreenHandler::Delegate (image) implementation:
115 virtual void OnPhotoTaken(const std::string& raw_data) OVERRIDE;
116 virtual void OnImageSelected(const std::string& image_url,
117 const std::string& image_type) OVERRIDE;
118 virtual void OnImageAccepted() OVERRIDE;
119 // ImageDecoder::Delegate overrides:
120 virtual void OnImageDecoded(const ImageDecoder* decoder,
121 const SkBitmap& decoded_image) OVERRIDE;
122 virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE;
126 void OnGetManagedUsers(const base::DictionaryValue* users);
128 base::WeakPtrFactory<LocallyManagedUserCreationScreen> weak_factory_;
129 LocallyManagedUserCreationScreenHandler* actor_;
131 scoped_ptr<ManagedUserCreationController> controller_;
132 scoped_ptr<base::DictionaryValue> existing_users_;
134 bool on_error_screen_;
135 std::string last_page_;
137 SupervisedUserSyncService* sync_service_;
139 gfx::ImageSkia user_photo_;
140 scoped_refptr<ImageDecoder> image_decoder_;
141 bool apply_photo_after_decoding_;
144 DISALLOW_COPY_AND_ASSIGN(LocallyManagedUserCreationScreen);
147 } // namespace chromeos
149 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_MANAGED_LOCALLY_MANAGED_USER_CREATION_SCREEN_H_