1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/mock_user_manager.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/task_runner.h"
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/fake_supervised_user_manager.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/profiles/profile_helper.h"
108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace {
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class FakeTaskRunner : public base::TaskRunner {
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                               const base::Closure& task,
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                               base::TimeDelta delay) OVERRIDE {
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    task.Run();
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    return true;
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  }
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual bool RunsTasksOnCurrentThread() const OVERRIDE { return true; }
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) protected:
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~FakeTaskRunner() {}
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
318bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)MockUserManager::MockUserManager()
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    : ChromeUserManager(new FakeTaskRunner(), new FakeTaskRunner()),
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      user_flow_(new DefaultUserFlow()),
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      supervised_user_manager_(new FakeSupervisedUserManager()) {
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ProfileHelper::SetProfileToUserForTestingEnabled(true);
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MockUserManager::~MockUserManager() {
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ProfileHelper::SetProfileToUserForTestingEnabled(false);
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ClearUserList();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const user_manager::UserList& MockUserManager::GetUsers() const {
4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return user_list_;
4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const user_manager::User* MockUserManager::GetLoggedInUser() const {
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return user_list_.empty() ? NULL : user_list_.front();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)user_manager::User* MockUserManager::GetLoggedInUser() {
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return user_list_.empty() ? NULL : user_list_.front();
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)user_manager::UserList MockUserManager::GetUnlockUsers() const {
56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return user_list_;
57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const std::string& MockUserManager::GetOwnerEmail() const {
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return GetLoggedInUser()->email();
6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const user_manager::User* MockUserManager::GetActiveUser() const {
641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return GetLoggedInUser();
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)user_manager::User* MockUserManager::GetActiveUser() {
681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return GetLoggedInUser();
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const user_manager::User* MockUserManager::GetPrimaryUser() const {
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return GetLoggedInUser();
73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)MultiProfileUserController* MockUserManager::GetMultiProfileUserController() {
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return NULL;
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)UserImageManager* MockUserManager::GetUserImageManager(
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const std::string& user_id) {
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return NULL;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)SupervisedUserManager* MockUserManager::GetSupervisedUserManager() {
858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  return supervised_user_manager_.get();
868bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
878bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Creates a new User instance.
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void MockUserManager::SetActiveUser(const std::string& email) {
901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ClearUserList();
911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  AddUser(email);
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserFlow* MockUserManager::GetCurrentUserFlow() const {
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return user_flow_.get();
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)UserFlow* MockUserManager::GetUserFlow(const std::string&) const {
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return user_flow_.get();
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)user_manager::User* MockUserManager::CreatePublicAccountUser(
1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const std::string& email) {
1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ClearUserList();
1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  user_manager::User* user = user_manager::User::CreatePublicAccountUser(email);
106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  user_list_.push_back(user);
107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ProfileHelper::Get()->SetProfileToUserMappingForTesting(user);
1081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return user_list_.back();
1091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MockUserManager::AddUser(const std::string& email) {
1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  user_manager::User* user = user_manager::User::CreateRegularUser(email);
113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  user_list_.push_back(user);
114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ProfileHelper::Get()->SetProfileToUserMappingForTesting(user);
1151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
1161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void MockUserManager::ClearUserList() {
1181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Can't use STLDeleteElements because of the protected destructor of User.
1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  user_manager::UserList::iterator user;
1201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  for (user = user_list_.begin(); user != user_list_.end(); ++user)
1211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    delete *user;
12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  user_list_.clear();
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
126