1 // Copyright 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_APP_MODE_KIOSK_PROFILE_LOADER_H_ 6 #define CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_PROFILE_LOADER_H_ 7 8 #include <string> 9 10 #include "base/basictypes.h" 11 #include "base/callback.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" 14 #include "chrome/browser/chromeos/login/auth/login_performer.h" 15 #include "chrome/browser/chromeos/login/login_utils.h" 16 17 class Profile; 18 19 namespace chromeos { 20 21 // KioskProfileLoader loads a special profile for a given app. It first 22 // attempts to login for the app's generated user id. If the login is 23 // successful, it prepares app profile then calls the delegate. 24 class KioskProfileLoader : public LoginPerformer::Delegate, 25 public LoginUtils::Delegate { 26 public: 27 class Delegate { 28 public: 29 virtual void OnProfileLoaded(Profile* profile) = 0; 30 virtual void OnProfileLoadFailed(KioskAppLaunchError::Error error) = 0; 31 32 protected: ~Delegate()33 virtual ~Delegate() {} 34 }; 35 36 KioskProfileLoader(const std::string& app_user_id, 37 bool use_guest_mount, 38 Delegate* delegate); 39 40 virtual ~KioskProfileLoader(); 41 42 // Starts profile load. Calls delegate on success or failure. 43 void Start(); 44 45 private: 46 class CryptohomedChecker; 47 48 void LoginAsKioskAccount(); 49 void ReportLaunchResult(KioskAppLaunchError::Error error); 50 51 // LoginPerformer::Delegate overrides 52 virtual void OnLoginSuccess(const UserContext& user_context) OVERRIDE; 53 virtual void OnLoginFailure(const LoginFailure& error) OVERRIDE; 54 virtual void WhiteListCheckFailed(const std::string& email) OVERRIDE; 55 virtual void PolicyLoadFailed() OVERRIDE; 56 virtual void OnOnlineChecked( 57 const std::string& email, bool success) OVERRIDE; 58 59 // LoginUtils::Delegate implementation: 60 virtual void OnProfilePrepared(Profile* profile) OVERRIDE; 61 62 std::string user_id_; 63 bool use_guest_mount_; 64 Delegate* delegate_; 65 scoped_ptr<CryptohomedChecker> cryptohomed_checker_; 66 scoped_ptr<LoginPerformer> login_performer_; 67 68 DISALLOW_COPY_AND_ASSIGN(KioskProfileLoader); 69 }; 70 71 } // namespace chromeos 72 73 #endif // CHROME_BROWSER_CHROMEOS_APP_MODE_KIOSK_PROFILE_LOADER_H_ 74