• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 #include "chrome/test/base/testing_profile_manager.h"
6 
7 #include "base/memory/ref_counted.h"
8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/extensions/extension_special_storage_policy.h"
10 #include "chrome/browser/prefs/pref_service_syncable.h"
11 #include "chrome/browser/profiles/profile_info_cache.h"
12 #include "chrome/browser/profiles/profile_manager.h"
13 #include "chrome/test/base/testing_browser_process.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 
16 namespace testing {
17 
18 class ProfileManager : public ::ProfileManagerWithoutInit {
19  public:
ProfileManager(const base::FilePath & user_data_dir)20   explicit ProfileManager(const base::FilePath& user_data_dir)
21       : ::ProfileManagerWithoutInit(user_data_dir) {}
22 
23  protected:
CreateProfileHelper(const base::FilePath & file_path)24   virtual Profile* CreateProfileHelper(
25       const base::FilePath& file_path) OVERRIDE {
26     return new TestingProfile(file_path);
27   }
28 };
29 
30 }  // namespace testing
31 
TestingProfileManager(TestingBrowserProcess * process)32 TestingProfileManager::TestingProfileManager(TestingBrowserProcess* process)
33     : called_set_up_(false),
34       browser_process_(process),
35       local_state_(process) {
36 }
37 
~TestingProfileManager()38 TestingProfileManager::~TestingProfileManager() {
39 }
40 
SetUp()41 bool TestingProfileManager::SetUp() {
42   SetUpInternal();
43   return called_set_up_;
44 }
45 
CreateTestingProfile(const std::string & profile_name,scoped_ptr<PrefServiceSyncable> prefs,const string16 & user_name,int avatar_id,const std::string & managed_user_id,const TestingProfile::TestingFactories & factories)46 TestingProfile* TestingProfileManager::CreateTestingProfile(
47     const std::string& profile_name,
48     scoped_ptr<PrefServiceSyncable> prefs,
49     const string16& user_name,
50     int avatar_id,
51     const std::string& managed_user_id,
52     const TestingProfile::TestingFactories& factories) {
53   DCHECK(called_set_up_);
54 
55   // Create a path for the profile based on the name.
56   base::FilePath profile_path(profiles_dir_.path());
57   profile_path = profile_path.AppendASCII(profile_name);
58 
59   // Create the profile and register it.
60   TestingProfile::Builder builder;
61   builder.SetPath(profile_path);
62   builder.SetPrefService(prefs.Pass());
63   builder.SetManagedUserId(managed_user_id);
64 
65   for (TestingProfile::TestingFactories::const_iterator it = factories.begin();
66        it != factories.end(); ++it) {
67     builder.AddTestingFactory(it->first, it->second);
68   }
69 
70   TestingProfile* profile = builder.Build().release();
71   profile->set_profile_name(profile_name);
72   profile_manager_->AddProfile(profile);  // Takes ownership.
73 
74   // Update the user metadata.
75   ProfileInfoCache& cache = profile_manager_->GetProfileInfoCache();
76   size_t index = cache.GetIndexOfProfileWithPath(profile_path);
77   cache.SetAvatarIconOfProfileAtIndex(index, avatar_id);
78   cache.SetManagedUserIdOfProfileAtIndex(index, managed_user_id);
79   // SetNameOfProfileAtIndex may reshuffle the list of profiles, so we do it
80   // last.
81   cache.SetNameOfProfileAtIndex(index, user_name);
82 
83   testing_profiles_.insert(std::make_pair(profile_name, profile));
84 
85   return profile;
86 }
87 
CreateTestingProfile(const std::string & name)88 TestingProfile* TestingProfileManager::CreateTestingProfile(
89     const std::string& name) {
90   DCHECK(called_set_up_);
91   return CreateTestingProfile(name, scoped_ptr<PrefServiceSyncable>(),
92                               UTF8ToUTF16(name), 0, std::string(),
93                               TestingProfile::TestingFactories());
94 }
95 
DeleteTestingProfile(const std::string & name)96 void TestingProfileManager::DeleteTestingProfile(const std::string& name) {
97   DCHECK(called_set_up_);
98 
99   TestingProfilesMap::iterator it = testing_profiles_.find(name);
100   DCHECK(it != testing_profiles_.end());
101 
102   TestingProfile* profile = it->second;
103 
104   ProfileInfoCache& cache = profile_manager_->GetProfileInfoCache();
105   cache.DeleteProfileFromCache(profile->GetPath());
106 
107   profile_manager_->profiles_info_.erase(profile->GetPath());
108 }
109 
DeleteProfileInfoCache()110 void TestingProfileManager::DeleteProfileInfoCache() {
111   profile_manager_->profile_info_cache_.reset(NULL);
112 }
113 
SetLoggedIn(bool logged_in)114 void TestingProfileManager::SetLoggedIn(bool logged_in) {
115   profile_manager_->logged_in_ = logged_in;
116 }
117 
profiles_dir()118 const base::FilePath& TestingProfileManager::profiles_dir() {
119   DCHECK(called_set_up_);
120   return profiles_dir_.path();
121 }
122 
profile_manager()123 ProfileManager* TestingProfileManager::profile_manager() {
124   DCHECK(called_set_up_);
125   return profile_manager_;
126 }
127 
profile_info_cache()128 ProfileInfoCache* TestingProfileManager::profile_info_cache() {
129   DCHECK(called_set_up_);
130   return &profile_manager_->GetProfileInfoCache();
131 }
132 
SetUpInternal()133 void TestingProfileManager::SetUpInternal() {
134   ASSERT_FALSE(browser_process_->profile_manager())
135       << "ProfileManager already exists";
136 
137   // Set up the directory for profiles.
138   ASSERT_TRUE(profiles_dir_.CreateUniqueTempDir());
139 
140   profile_manager_ = new testing::ProfileManager(profiles_dir_.path());
141   browser_process_->SetProfileManager(profile_manager_);  // Takes ownership.
142 
143   called_set_up_ = true;
144 }
145