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. 4 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_ 7 8 #include <string> 9 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" 20 21 class Profile; 22 23 namespace chromeos { 24 25 class NetworkState; 26 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 { 36 public: 37 LocallyManagedUserCreationScreen( 38 ScreenObserver* observer, 39 LocallyManagedUserCreationScreenHandler* actor); 40 virtual ~LocallyManagedUserCreationScreen(); 41 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(); 47 48 // Called when authentication fails for manager with provided password. 49 // Displays wrong password message on manager selection screen. 50 void OnManagerLoginFailure(); 51 52 // Called when manager is successfully authenticated and account is in 53 // consistent state. 54 void OnManagerFullyAuthenticated(Profile* manager_profile); 55 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(); 60 61 // Shows initial screen where managed user name/password are defined and 62 // manager is selected. 63 void ShowInitialScreen(); 64 65 // CameraPresenceNotifier::Observer implementation: 66 virtual void OnCameraPresenceCheckDone(bool is_camera_present) OVERRIDE; 67 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; 73 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; 79 80 // LocallyManagedUserCreationScreenHandler::Delegate implementation: 81 virtual void OnActorDestroyed(LocallyManagedUserCreationScreenHandler* actor) 82 OVERRIDE; 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; 98 99 // LocallyManagedUserController::StatusConsumer overrides. 100 virtual void OnCreationError(ManagedUserCreationController::ErrorCode code) 101 OVERRIDE; 102 virtual void OnCreationTimeout() OVERRIDE; 103 virtual void OnCreationSuccess() OVERRIDE; 104 virtual void OnLongCreationWarning() OVERRIDE; 105 106 // NetworkPortalDetector::Observer implementation: 107 virtual void OnPortalDetectionCompleted( 108 const NetworkState* network, 109 const NetworkPortalDetector::CaptivePortalState& state) OVERRIDE; 110 111 // TODO(antrim) : this is an explicit code duplications with UserImageScreen. 112 // It should be removed by issue 251179. 113 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; 123 124 private: 125 void ApplyPicture(); 126 void OnGetManagedUsers(const base::DictionaryValue* users); 127 128 base::WeakPtrFactory<LocallyManagedUserCreationScreen> weak_factory_; 129 LocallyManagedUserCreationScreenHandler* actor_; 130 131 scoped_ptr<ManagedUserCreationController> controller_; 132 scoped_ptr<base::DictionaryValue> existing_users_; 133 134 bool on_error_screen_; 135 std::string last_page_; 136 137 SupervisedUserSyncService* sync_service_; 138 139 gfx::ImageSkia user_photo_; 140 scoped_refptr<ImageDecoder> image_decoder_; 141 bool apply_photo_after_decoding_; 142 int selected_image_; 143 144 DISALLOW_COPY_AND_ASSIGN(LocallyManagedUserCreationScreen); 145 }; 146 147 } // namespace chromeos 148 149 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_MANAGED_LOCALLY_MANAGED_USER_CREATION_SCREEN_H_ 150 151