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