OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_TEST_BASE_TESTING_PROFILE_H_ | 5 #ifndef CHROME_TEST_BASE_TESTING_PROFILE_H_ |
6 #define CHROME_TEST_BASE_TESTING_PROFILE_H_ | 6 #define CHROME_TEST_BASE_TESTING_PROFILE_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
13 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
| 14 #include "components/browser_context_keyed_service/browser_context_keyed_service
_factory.h" |
14 | 15 |
15 namespace content { | 16 namespace content { |
16 class MockResourceContext; | 17 class MockResourceContext; |
17 } | 18 } |
18 | 19 |
19 namespace extensions { | 20 namespace extensions { |
20 class ExtensionPrefs; | 21 class ExtensionPrefs; |
21 } | 22 } |
22 | 23 |
23 namespace history { | 24 namespace history { |
(...skipping 28 matching lines...) Expand all Loading... |
52 // platforms but must be different on ChromeOS because a logged-in user cannot | 53 // platforms but must be different on ChromeOS because a logged-in user cannot |
53 // use "Default" as profile directory. | 54 // use "Default" as profile directory. |
54 // Browser- and UI tests should always use this to get to the user's profile | 55 // Browser- and UI tests should always use this to get to the user's profile |
55 // directory. Unit-tests, though, should use |kInitialProfile|, which is | 56 // directory. Unit-tests, though, should use |kInitialProfile|, which is |
56 // always "Default", because they are runnining without logged-in user. | 57 // always "Default", because they are runnining without logged-in user. |
57 static const char kTestUserProfileDir[]; | 58 static const char kTestUserProfileDir[]; |
58 | 59 |
59 // Default constructor that cannot be used with multi-profiles. | 60 // Default constructor that cannot be used with multi-profiles. |
60 TestingProfile(); | 61 TestingProfile(); |
61 | 62 |
| 63 typedef std::vector<std::pair< |
| 64 BrowserContextKeyedServiceFactory*, |
| 65 BrowserContextKeyedServiceFactory::FactoryFunction> > TestingFactories; |
| 66 |
62 // Helper class for building an instance of TestingProfile (allows injecting | 67 // Helper class for building an instance of TestingProfile (allows injecting |
63 // mocks for various services prior to profile initialization). | 68 // mocks for various services prior to profile initialization). |
64 // TODO(atwilson): Remove non-default constructors and various setters in | 69 // TODO(atwilson): Remove non-default constructors and various setters in |
65 // favor of using the Builder API. | 70 // favor of using the Builder API. |
66 class Builder { | 71 class Builder { |
67 public: | 72 public: |
68 Builder(); | 73 Builder(); |
69 ~Builder(); | 74 ~Builder(); |
70 | 75 |
71 // Sets a Delegate to be called back when the Profile is fully initialized. | 76 // Sets a Delegate to be called back during profile init. This causes the |
72 // This causes the final initialization to be performed via a task so the | 77 // final initialization to be performed via a task so the caller must run |
73 // caller must run a MessageLoop. Caller maintains ownership of the Delegate | 78 // a MessageLoop. Caller maintains ownership of the Delegate |
74 // and must manage its lifetime so it continues to exist until profile | 79 // and must manage its lifetime so it continues to exist until profile |
75 // initialization is complete. | 80 // initialization is complete. |
76 void SetDelegate(Delegate* delegate); | 81 void SetDelegate(Delegate* delegate); |
77 | 82 |
| 83 // Adds a testing factory to the TestingProfile. These testing factories |
| 84 // are applied before the ProfileKeyedServices are created. |
| 85 void AddTestingFactory( |
| 86 BrowserContextKeyedServiceFactory* service_factory, |
| 87 BrowserContextKeyedServiceFactory::FactoryFunction callback); |
| 88 |
78 // Sets the ExtensionSpecialStoragePolicy to be returned by | 89 // Sets the ExtensionSpecialStoragePolicy to be returned by |
79 // GetExtensionSpecialStoragePolicy(). | 90 // GetExtensionSpecialStoragePolicy(). |
80 void SetExtensionSpecialStoragePolicy( | 91 void SetExtensionSpecialStoragePolicy( |
81 scoped_refptr<ExtensionSpecialStoragePolicy> policy); | 92 scoped_refptr<ExtensionSpecialStoragePolicy> policy); |
82 | 93 |
83 // Sets the path to the directory to be used to hold profile data. | 94 // Sets the path to the directory to be used to hold profile data. |
84 void SetPath(const base::FilePath& path); | 95 void SetPath(const base::FilePath& path); |
85 | 96 |
86 // Sets the PrefService to be used by this profile. | 97 // Sets the PrefService to be used by this profile. |
87 void SetPrefService(scoped_ptr<PrefServiceSyncable> prefs); | 98 void SetPrefService(scoped_ptr<PrefServiceSyncable> prefs); |
88 | 99 |
| 100 // Makes the Profile being built an incognito profile. |
| 101 void SetIncognito(); |
| 102 |
89 // Creates the TestingProfile using previously-set settings. | 103 // Creates the TestingProfile using previously-set settings. |
90 scoped_ptr<TestingProfile> Build(); | 104 scoped_ptr<TestingProfile> Build(); |
91 | 105 |
92 private: | 106 private: |
93 // If true, Build() has already been called. | 107 // If true, Build() has already been called. |
94 bool build_called_; | 108 bool build_called_; |
95 | 109 |
96 // Various staging variables where values are held until Build() is invoked. | 110 // Various staging variables where values are held until Build() is invoked. |
97 scoped_ptr<PrefServiceSyncable> pref_service_; | 111 scoped_ptr<PrefServiceSyncable> pref_service_; |
98 scoped_refptr<ExtensionSpecialStoragePolicy> extension_policy_; | 112 scoped_refptr<ExtensionSpecialStoragePolicy> extension_policy_; |
99 base::FilePath path_; | 113 base::FilePath path_; |
100 Delegate* delegate_; | 114 Delegate* delegate_; |
| 115 bool incognito_; |
| 116 TestingFactories testing_factories_; |
101 | 117 |
102 DISALLOW_COPY_AND_ASSIGN(Builder); | 118 DISALLOW_COPY_AND_ASSIGN(Builder); |
103 }; | 119 }; |
104 | 120 |
105 // Multi-profile aware constructor that takes the path to a directory managed | 121 // Multi-profile aware constructor that takes the path to a directory managed |
106 // for this profile. This constructor is meant to be used by | 122 // for this profile. This constructor is meant to be used by |
107 // TestingProfileManager::CreateTestingProfile. If you need to create multi- | 123 // TestingProfileManager::CreateTestingProfile. If you need to create multi- |
108 // profile profiles, use that factory method instead of this directly. | 124 // profile profiles, use that factory method instead of this directly. |
109 // Exception: if you need to create multi-profile profiles for testing the | 125 // Exception: if you need to create multi-profile profiles for testing the |
110 // ProfileManager, then use the constructor below instead. | 126 // ProfileManager, then use the constructor below instead. |
111 explicit TestingProfile(const base::FilePath& path); | 127 explicit TestingProfile(const base::FilePath& path); |
112 | 128 |
113 // Multi-profile aware constructor that takes the path to a directory managed | 129 // Multi-profile aware constructor that takes the path to a directory managed |
114 // for this profile and a delegate. This constructor is meant to be used | 130 // for this profile and a delegate. This constructor is meant to be used |
115 // for unittesting the ProfileManager. | 131 // for unittesting the ProfileManager. |
116 TestingProfile(const base::FilePath& path, Delegate* delegate); | 132 TestingProfile(const base::FilePath& path, Delegate* delegate); |
117 | 133 |
118 // Full constructor allowing the setting of all possible instance data. | 134 // Full constructor allowing the setting of all possible instance data. |
119 // Callers should use Builder::Build() instead of invoking this constructor. | 135 // Callers should use Builder::Build() instead of invoking this constructor. |
120 TestingProfile(const base::FilePath& path, | 136 TestingProfile(const base::FilePath& path, |
121 Delegate* delegate, | 137 Delegate* delegate, |
122 scoped_refptr<ExtensionSpecialStoragePolicy> extension_policy, | 138 scoped_refptr<ExtensionSpecialStoragePolicy> extension_policy, |
123 scoped_ptr<PrefServiceSyncable> prefs); | 139 scoped_ptr<PrefServiceSyncable> prefs, |
| 140 bool incognito, |
| 141 const TestingFactories& factories); |
124 | 142 |
125 virtual ~TestingProfile(); | 143 virtual ~TestingProfile(); |
126 | 144 |
127 // Creates the favicon service. Consequent calls would recreate the service. | 145 // Creates the favicon service. Consequent calls would recreate the service. |
128 void CreateFaviconService(); | 146 void CreateFaviconService(); |
129 | 147 |
130 // Creates the history service. If |delete_file| is true, the history file is | 148 // Creates the history service. If |delete_file| is true, the history file is |
131 // deleted first, then the HistoryService is created. As TestingProfile | 149 // deleted first, then the HistoryService is created. As TestingProfile |
132 // deletes the directory containing the files used by HistoryService, this | 150 // deletes the directory containing the files used by HistoryService, this |
133 // only matters if you're recreating the HistoryService. If |no_db| is true, | 151 // only matters if you're recreating the HistoryService. If |no_db| is true, |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 content::ProtocolHandlerMap* protocol_handlers) OVERRIDE; | 197 content::ProtocolHandlerMap* protocol_handlers) OVERRIDE; |
180 virtual net::URLRequestContextGetter* GetRequestContextForRenderProcess( | 198 virtual net::URLRequestContextGetter* GetRequestContextForRenderProcess( |
181 int renderer_child_id) OVERRIDE; | 199 int renderer_child_id) OVERRIDE; |
182 virtual content::ResourceContext* GetResourceContext() OVERRIDE; | 200 virtual content::ResourceContext* GetResourceContext() OVERRIDE; |
183 virtual content::GeolocationPermissionContext* | 201 virtual content::GeolocationPermissionContext* |
184 GetGeolocationPermissionContext() OVERRIDE; | 202 GetGeolocationPermissionContext() OVERRIDE; |
185 virtual quota::SpecialStoragePolicy* GetSpecialStoragePolicy() OVERRIDE; | 203 virtual quota::SpecialStoragePolicy* GetSpecialStoragePolicy() OVERRIDE; |
186 | 204 |
187 virtual TestingProfile* AsTestingProfile() OVERRIDE; | 205 virtual TestingProfile* AsTestingProfile() OVERRIDE; |
188 virtual std::string GetProfileName() OVERRIDE; | 206 virtual std::string GetProfileName() OVERRIDE; |
189 void set_incognito(bool incognito) { incognito_ = incognito; } | 207 |
| 208 // DEPRECATED, because it's fragile to change a profile from non-incognito |
| 209 // to incognito after the ProfileKeyedServices have been created (some |
| 210 // ProfileKeyedServices either should not exist in incognito mode, or will |
| 211 // crash when they try to get references to other services they depend on, |
| 212 // but do not exist in incognito mode). |
| 213 // TODO(atwilson): Remove this API (http://crbug.com/277296). |
| 214 // |
| 215 // Changes a profile's to/from incognito mode temporarily - profile will be |
| 216 // returned to non-incognito before destruction to allow services to |
| 217 // properly shutdown. This is only supported for legacy tests - new tests |
| 218 // should create a true incognito profile using Builder::SetIncognito() or |
| 219 // by using the TestingProfile constructor that allows setting the incognito |
| 220 // flag. |
| 221 void ForceIncognito(bool force_incognito) { |
| 222 force_incognito_ = force_incognito; |
| 223 } |
| 224 |
190 // Assumes ownership. | 225 // Assumes ownership. |
191 virtual void SetOffTheRecordProfile(Profile* profile); | 226 virtual void SetOffTheRecordProfile(scoped_ptr<Profile> profile); |
192 virtual void SetOriginalProfile(Profile* profile); | 227 virtual void SetOriginalProfile(Profile* profile); |
193 virtual Profile* GetOffTheRecordProfile() OVERRIDE; | 228 virtual Profile* GetOffTheRecordProfile() OVERRIDE; |
194 virtual void DestroyOffTheRecordProfile() OVERRIDE {} | 229 virtual void DestroyOffTheRecordProfile() OVERRIDE {} |
195 virtual bool HasOffTheRecordProfile() OVERRIDE; | 230 virtual bool HasOffTheRecordProfile() OVERRIDE; |
196 virtual Profile* GetOriginalProfile() OVERRIDE; | 231 virtual Profile* GetOriginalProfile() OVERRIDE; |
197 virtual bool IsManaged() OVERRIDE; | 232 virtual bool IsManaged() OVERRIDE; |
198 virtual ExtensionService* GetExtensionService() OVERRIDE; | 233 virtual ExtensionService* GetExtensionService() OVERRIDE; |
199 void SetExtensionSpecialStoragePolicy( | 234 void SetExtensionSpecialStoragePolicy( |
200 ExtensionSpecialStoragePolicy* extension_special_storage_policy); | 235 ExtensionSpecialStoragePolicy* extension_special_storage_policy); |
201 virtual ExtensionSpecialStoragePolicy* | 236 virtual ExtensionSpecialStoragePolicy* |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 // maps to this profile. | 334 // maps to this profile. |
300 void CreateProfilePolicyConnector(); | 335 void CreateProfilePolicyConnector(); |
301 | 336 |
302 // Internally, this is a TestURLRequestContextGetter that creates a dummy | 337 // Internally, this is a TestURLRequestContextGetter that creates a dummy |
303 // request context. Currently, only the CookieMonster is hooked up. | 338 // request context. Currently, only the CookieMonster is hooked up. |
304 scoped_refptr<net::URLRequestContextGetter> extensions_request_context_; | 339 scoped_refptr<net::URLRequestContextGetter> extensions_request_context_; |
305 | 340 |
306 std::wstring id_; | 341 std::wstring id_; |
307 | 342 |
308 bool incognito_; | 343 bool incognito_; |
| 344 bool force_incognito_; |
309 scoped_ptr<Profile> incognito_profile_; | 345 scoped_ptr<Profile> incognito_profile_; |
310 Profile* original_profile_; | 346 Profile* original_profile_; |
311 | 347 |
312 // Did the last session exit cleanly? Default is true. | 348 // Did the last session exit cleanly? Default is true. |
313 bool last_session_exited_cleanly_; | 349 bool last_session_exited_cleanly_; |
314 | 350 |
315 scoped_refptr<HostContentSettingsMap> host_content_settings_map_; | 351 scoped_refptr<HostContentSettingsMap> host_content_settings_map_; |
316 | 352 |
317 base::FilePath last_selected_directory_; | 353 base::FilePath last_selected_directory_; |
318 scoped_refptr<history::TopSites> top_sites_; // For history and thumbnails. | 354 scoped_refptr<history::TopSites> top_sites_; // For history and thumbnails. |
(...skipping 21 matching lines...) Expand all Loading... |
340 // scoped_ptr<>. | 376 // scoped_ptr<>. |
341 content::MockResourceContext* resource_context_; | 377 content::MockResourceContext* resource_context_; |
342 | 378 |
343 scoped_ptr<policy::ProfilePolicyConnector> profile_policy_connector_; | 379 scoped_ptr<policy::ProfilePolicyConnector> profile_policy_connector_; |
344 | 380 |
345 // Weak pointer to a delegate for indicating that a profile was created. | 381 // Weak pointer to a delegate for indicating that a profile was created. |
346 Delegate* delegate_; | 382 Delegate* delegate_; |
347 }; | 383 }; |
348 | 384 |
349 #endif // CHROME_TEST_BASE_TESTING_PROFILE_H_ | 385 #endif // CHROME_TEST_BASE_TESTING_PROFILE_H_ |
OLD | NEW |