| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_TEST_BASE_TESTING_PROFILE_MANAGER_H_ |
| #define CHROME_TEST_BASE_TESTING_PROFILE_MANAGER_H_ |
| |
| #include <map> |
| #include <string> |
| |
| #include "base/compiler_specific.h" |
| #include "base/files/file_path.h" |
| #include "base/files/scoped_temp_dir.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "base/strings/string16.h" |
| #include "chrome/test/base/scoped_testing_local_state.h" |
| |
| class PrefServiceSyncable; |
| class ProfileInfoCache; |
| class ProfileManager; |
| class TestingBrowserProcess; |
| class TestingProfile; |
| |
| // The TestingProfileManager is a TestingProfile factory for a multi-profile |
| // environment. It will bring up a full ProfileManager and attach it to the |
| // TestingBrowserProcess set up in your test. |
| // |
| // When a Profile is needed for testing, create it through the factory method |
| // below instead of creating it via |new TestingProfile|. It is not possible |
| // to register profiles created in that fashion with the ProfileManager. |
| class TestingProfileManager { |
| public: |
| explicit TestingProfileManager(TestingBrowserProcess* browser_process); |
| ~TestingProfileManager(); |
| |
| // This needs to be called in testing::Test::SetUp() to put the object in a |
| // valid state. Some work cannot be done in a constructor because it may |
| // call gtest asserts to verify setup. The result of this call can be used |
| // to ASSERT before doing more SetUp work in the test. |
| bool SetUp() WARN_UNUSED_RESULT; |
| |
| // Creates a new TestingProfile whose data lives in a directory related to |
| // profile_name, which is a non-user-visible key for the test environment. |
| // |prefs| is the PrefService used by the profile. If it is NULL, the profile |
| // creates a PrefService on demand. |
| // |user_name|, |avatar_id| and |managed_user_id| are passed along to the |
| // ProfileInfoCache and provide the user-visible profile metadata. This will |
| // register the TestingProfile with the profile subsystem as well. The |
| // subsystem owns the Profile and returns a weak pointer. |
| TestingProfile* CreateTestingProfile(const std::string& profile_name, |
| scoped_ptr<PrefServiceSyncable> prefs, |
| const string16& user_name, |
| int avatar_id, |
| const std::string& managed_user_id); |
| |
| // Small helper for creating testing profiles. Just forwards to above. |
| TestingProfile* CreateTestingProfile(const std::string& name); |
| |
| // Deletes a TestingProfile from the profile subsystem. |
| void DeleteTestingProfile(const std::string& profile_name); |
| |
| // Deletes the cache instance. This is useful for testing that the cache is |
| // properly persisting data. |
| void DeleteProfileInfoCache(); |
| |
| // Sets ProfileManager's logged_in state. This is only useful on ChromeOS. |
| void SetLoggedIn(bool logged_in); |
| |
| // Helper accessors. |
| const base::FilePath& profiles_dir(); |
| ProfileManager* profile_manager(); |
| ProfileInfoCache* profile_info_cache(); |
| |
| private: |
| typedef std::map<std::string, TestingProfile*> TestingProfilesMap; |
| |
| // Does the actual ASSERT-checked SetUp work. This function cannot have a |
| // return value, so it sets the |called_set_up_| flag on success and that is |
| // returned in the public SetUp. |
| void SetUpInternal(); |
| |
| // Whether SetUp() was called to put the object in a valid state. |
| bool called_set_up_; |
| |
| // The directory in which new profiles are placed. |
| base::ScopedTempDir profiles_dir_; |
| |
| // Weak reference to the browser process on which the ProfileManager is set. |
| TestingBrowserProcess* browser_process_; |
| |
| // Local state in which all the profiles are registered. |
| ScopedTestingLocalState local_state_; |
| |
| // Weak reference to the profile manager. |
| ProfileManager* profile_manager_; |
| |
| // Map of profile_name to TestingProfile* from CreateTestingProfile(). |
| TestingProfilesMap testing_profiles_; |
| |
| DISALLOW_COPY_AND_ASSIGN(TestingProfileManager); |
| }; |
| |
| #endif // CHROME_TEST_BASE_TESTING_PROFILE_MANAGER_H_ |