Home | History | Annotate | Download | only in managed
      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