15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USERS_CHROME_USER_MANAGER_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define CHROME_BROWSER_CHROMEOS_LOGIN_USERS_CHROME_USER_MANAGER_H_
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/basictypes.h"
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager_base.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace base {
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class TaskRunner;
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace chromeos {
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class MultiProfileUserController;
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SupervisedUserManager;
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class UserFlow;
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class UserImageManager;
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Chrome specific interface of the UserManager.
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ChromeUserManager : public user_manager::UserManagerBase {
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ChromeUserManager(scoped_refptr<base::TaskRunner> task_runner,
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                    scoped_refptr<base::TaskRunner> blocking_task_runner);
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~ChromeUserManager();
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Returns current ChromeUserManager or NULL if instance hasn't been
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // yet initialized.
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  static ChromeUserManager* Get();
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual MultiProfileUserController* GetMultiProfileUserController() = 0;
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual UserImageManager* GetUserImageManager(const std::string& user_id) = 0;
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual SupervisedUserManager* GetSupervisedUserManager() = 0;
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Method that allows to set |flow| for user identified by |user_id|.
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Flow should be set before login attempt.
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Takes ownership of the |flow|, |flow| will be deleted in case of login
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // failure.
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void SetUserFlow(const std::string& user_id, UserFlow* flow) = 0;
425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Return user flow for current user. Returns instance of DefaultUserFlow if
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // no flow was defined for current user, or user is not logged in.
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Returned value should not be cached.
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual UserFlow* GetCurrentUserFlow() const = 0;
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Return user flow for user identified by |user_id|. Returns instance of
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // DefaultUserFlow if no flow was defined for user.
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Returned value should not be cached.
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual UserFlow* GetUserFlow(const std::string& user_id) const = 0;
525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Resets user flow for user identified by |user_id|.
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void ResetUserFlow(const std::string& user_id) = 0;
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ChromeUserManager);
575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}  // namespace chromeos
605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USERS_CHROME_USER_MANAGER_H_
62